ary*_*axt 3 getter synthesizer properties objective-c
有可能以某种方式创建一个自定义的@synthesize来生成客户getter,setters ??
例如:
@interface
@property (nonatomic, retain) MyObject *object;
@end
@implementation
@lazyInitialize object;
@end
Run Code Online (Sandbox Code Playgroud)
然后以某种方式定义@lazyInitialize以生成一个惰性初始化方法
//@lazyInitialize
- (id)"property name"
{
if (!"property name")
{
"property name" = [[["property name" class] alloc] init];
}
return "property name";
}
Run Code Online (Sandbox Code Playgroud)
不过,你可以尝试不同的东西.我不会在几天前想到这一点,但我碰巧正在阅读Cocoa With Love.在帖子链接中,他讨论了他是如何制作一个#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; \
}
Run Code Online (Sandbox Code Playgroud)
会工作?我很抱歉我没有时间为您正确测试它,所以请将此作为公平警告,这不是一个快速的复制/粘贴解决方案.对于那个很抱歉.希望它仍然有用!;)
示例用法
这应该工作,再次警告:未经测试的代码:
头
// ....
@interface SomeClass : NSObject {
NSObject *someObj;
}
@end
Run Code Online (Sandbox Code Playgroud)
履行
@implementation SomeClass
// ....
SYNTHESIZE_LAZY_INITIALIZER_FOR_OBJECT(someObj, NSObject);
// ....
@end
Run Code Online (Sandbox Code Playgroud)