Вы можете попробовать что-то другое, хотя.Я бы не подумал об этом больше, чем пару дней назад, но я случайно прочитал Какао с любовью .В связанном посте он обсуждал, как он создал макрос #define
, который "генерировал бы" весь класс для синглтона, куда бы вы ни вызывали макрос.Для этого вы можете загрузить его код (может дать представление о вашей собственной реализации).
Возможно, что-то вроде ( Предупреждение: впереди непроверенный код ):
#define SYNTHESIZE_LAZY_INITIALIZER_FOR_OBJECT(objectName, objectType) \
\
- (objectType *)objectName \
{ \
if(!objectName) \
{ \
objectName = [[objectType alloc] init]; \
} \
return objectName; \
} \
\
- (void)set##objectName:(objectType *)value \
{ \
[value retain]; \
[objectName release]; \
objectName = value; \
}
будет работать?Я прошу прощения за то, что у меня нет времени, чтобы должным образом протестировать его для вас, поэтому примите это за справедливое предупреждение, что это не быстрое решение для копирования / вставки.Извини за это.Надеюсь, это все еще полезно!;)
Пример использования
Это должно работать, опять же Предупреждение: впереди непроверенный код :
Заголовок
// ....
@interface SomeClass : NSObject {
NSObject *someObj;
}
@end
Реализация
@implementation SomeClass
// ....
SYNTHESIZE_LAZY_INITIALIZER_FOR_OBJECT(someObj, NSObject);
// ....
@end