Как я могу написать функцию в target-c, которую можно использовать поверх любого объекта в моем приложении для iPhone? - PullRequest
7 голосов
/ 25 апреля 2009

Я хочу создать функцию, которой я передаю объект. Затем эта функция должна распечатать некоторую информацию для меня.

как:

analyzeThis(anyObject);

Я знаю о методах, но не знаю, как создать функцию. Как я понимаю, функция работает глобально во всех методах и классах, верно?

Ответы [ 3 ]

14 голосов
/ 25 апреля 2009

Вы бы сделали это так же, как и любую другую функцию, которую вы написали бы на C. Поэтому, если ваша функция определена в исходном файле с именем myLibraryFunctions.m, любой, кто хотел бы использовать эту функцию, включил бы файл заголовка где вы его определяете (вероятно, myLibraryFunctions.h, а затем просто убедитесь, что они связываются с объектным файлом (большая часть этого будет сделана для вас в XCode, если вы просто создадите файл для размещения ваших «глобальных» функций и включите заголовок файл для них в любом исходном файле, откуда вы к нему обращаетесь. Затем просто определите его:

void analyzeThis(id anyObject);

void analyzeThis(id anyObject) {
    NSLog(@"Object %p: %zu, %@", anyObject, malloc_size(anyObject), anyObject);
}

Но на самом деле вы пишете все, что хотите, в своей функции. Эти функции не должны быть частью каких-либо определений классов или чего-то подобного. В этом случае они точно такие же, как и в C.

1 голос
/ 26 апреля 2009

Для этого существует два способа:

  • написать глобальную функцию, так же, как вы сделали бы в C
  • создайте категорию NSObject, в которой вы реализуете метод, который затем будет доступен всем классам, у которых NSObject является предком.
1 голос
/ 26 апреля 2009

Вы пытаетесь переопределить метод описания NSObject? Если вы отправите сообщение NSObject, он вернет строку, содержащую информацию о себе. Вы можете переопределить - (NSString *) описание и добавить дополнительную информацию к этой строке.

Если вы сделаете это, вы обнаружите, что происходит волшебство - например, когда вы печатаете объект массива в отладчике, он будет перебирать всех членов массива и печатать их описания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...