Objective C - 使用ARC定制setter?

时间:2012-04-06 01:56:42

标签: objective-c properties automatic-ref-counting

以下是我以前编写自定义保留设置器的方法:

- (void)setMyObject:(MyObject *)anObject
{
   [_myObject release], _myObject =  nil;
   _myObject = [anObject retain];

   // Other stuff
}

当属性设置为strong时,如何使用ARC实现此目的。 如何确保变量具有强指针?

2 个答案:

答案 0 :(得分:66)

strong在ivar级别自行处理,所以你只能做

- (void)setMyObject:(MyObject *)anObject
{
   _myObject = anObject;
   // other stuff
}

就是这样。

注意:如果你这样做没有自动属性,那么ivar就是

MyObject *_myObject;

然后ARC会为您处理保留和发布(谢天谢地)。 __strong默认为限定符。

答案 1 :(得分:5)

总结答案

.h文件

//If you are doing this without the ivar
@property (nonatomic, strong) MyObject *myObject;

.m文件

@synthesize myObject = _myObject;

- (void)setMyObject:(MyObject *)anObject
{
    if (_myObject != anObject)
    {
        _myObject = nil;
        _myObject = anObject;
    }
    // other stuff
}