Objective C - Custom @synthesize?
是否可以创建一个自定义的@synthesis来生成客户getter、setter??
例如:
1 2 3 4 5 6 7 | @interface @property (nonatomic, retain) MyObject *object; @end @implementation @lazyInitialize object; @end |
然后定义@lazyinitialize以生成懒惰的初始值设定项方法
1 2 3 4 5 6 7 8 9 10 | //@lazyInitialize - (id)"property name" { if (!"property name") { "property name" = [[["property name" class] alloc] init]; } return"property name"; } |
你可以尝试不同的事情,虽然。我不会有思想的,这可能比前一对夫妇的日子,但我happened可可是用爱阅读。在他discussed位点后,他如何在一
或许什么样(提前预警:untested code): </P >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #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; \ } |
能工作吗?我apologize,我不会有时间为你properly测试它,这样,作为公平的预警,这不是一个快速拷贝/粘贴使用。对不起,我。这是hopefully仍然useful!); </P >
例如usage </P >
这应该工作,再untested提前预警:代码: </P >
头 </P >
1 2 3 4 5 | // .... @interface SomeClass : NSObject { NSObject *someObj; } @end |
实施 </P >
1 2 3 4 5 | @implementation SomeClass // .... SYNTHESIZE_LAZY_INITIALIZER_FOR_OBJECT(someObj, NSObject); // .... @end |
我真的喜欢wersal瑞恩的答案所采用