NSLocalizedString - это вспомогательный макрос, который, вероятно, можно сделать функцией.
Однако, есть веские причины, по которым NSAssert и друзья являются макросами, помимо той, которая приведена в ответе Георга. NSAssert оценивает логическое выражение, чтобы определить, следует ли создавать исключение. Это логическое выражение может быть довольно вычислительно дорогим и не таким, как вы хотели бы, чтобы происходило в вашем коде релиза. В C (и, следовательно, в Objective-C) нет механизма пропуска обычных вызовов функций для сборки выпуска, не прибегая к препроцессору или, возможно, не используя такие вещи, как:
if (debug)
{
assertAsAFunction(foo == 3, "foo should be 3");
}
Другое преимущество макроса NSAssert заключается в том, что условие может быть преобразовано в строку для использования в сообщении журнала.