关于属性:Objective C – 自定义@synthesize?

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位点后,他如何在一#define宏观调控,将"generate"整个类,对独生子女在wherever你要从"宏观调控。你可以下载的代码(可能给他的这一思想对你自己的执行)。 </P >

或许什么样(提前预警: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


@synthesize和基于Objective-C的工程性质,这similarly自动# C语法,语法的要求,都generate最小为creating性质getters /制定的。languages和安全,如果你想自定义functionality,这implement manually你需要他们。 </P >

我真的喜欢wersal瑞恩的答案所采用#define这滚你自己的宏。你仍然有它自己写的方法,但你只对它的优美。 </P >