Соглашение о присвоении имен в objC - PullRequest
3 голосов
/ 12 мая 2011

изучая некоторый пример кода из курса программирования iOS (cs193p fall2010), я наткнулся на среду sbjson, которая расширяет NSObject и т. Д. По категории SBJSON.но в заголовке + "NSObject + SBJSON.h" он читается как:

@interface NSObject (NSObject_SBJSON)

откуда происходит волшебное отображение NSObject_SBJSON в SBJSON?я заметил, что xcode принимает любую строку перед подчеркиванием!?

, но нигде не нашел намека на это.

thanx klaus

Ответы [ 3 ]

6 голосов
/ 12 мая 2011

По сути, на самом деле картирования не существует.Категория Objective-C используется для добавления дополнительных методов в существующий класс, без необходимости прямого доступа к соответствующему файлу / деталям реализации этого класса.Поэтому, когда вы объявляете что-то вроде:

@interface NSObject (NSObject_SBJSON)

Вы говорите, что ваша категория добавляет методы к классу NSObject (и любому классу, производному от него).Часть «NSObject_SBJSON» в скобках не очень важна и может быть чем угодно (при условии, что она не совпадает с именем чьей-либо категории для этого типа объекта).В него даже не нужно включать «NSObject», поэтому наличие @interface NSObject (SBJSON) будет в равной степени допустимым.

2 голосов
/ 12 мая 2011

Категории не названы в том смысле, что ваш код будет ссылаться на них по имени, как протокол.Название категории в этом случае - Xcode (плохой) перевод имени файла NSObject+SBJSON.h в название категории;по какой-то причине компилятор Xcode или Objective-C не хочет + в имени категории.

Единственное время, когда используется имя категории, - это сопоставление интерфейса и реализаций.

0 голосов
/ 17 декабря 2011

NSObject + SBJSON.h был изменен / решен в Xcode 4.2

...