在这种情况下是否保留了对象

时间:2009-09-29 00:19:46

标签: iphone objective-c cocoa-touch

我有一个简单的问题,在类中我有一个带属性保留的变量

//Classs ArrayClass has this array
@property(nonatomic, retain) NSMutableArray *array;

现在我做的时候

self.array = [SomeClass getArray];

我需要释放数组......

现在如果我有ArrayClass的对象和我做

arrayClassObj.array = [SomeClass getArray];

所以在这种情况下,是否调用了setter方法?在这种情况下我是否需要释放。

2 个答案:

答案 0 :(得分:3)

由@synthesize生成的setter(因为你告诉它保留)将为你处理保留和释放。如果你覆盖它,它就在你身上。

在你的dealloc中,不要忘记释放它 - 安全,不要忘记,因为消息为nil不是错误(如果你通过它,你应该将var设置为nil)

答案 1 :(得分:2)

在这两种情况下,从array分配的[SomeClass getArray]属性对象都需要自行释放,除非您将属性设置为nil

拥有array属性的类需要以下

// ArrayClassObject dealloc (self in first example)
-(void)dealloc
{
    [array release];
    [super dealloc];
}

当您分配属性然后将其指定为nil时,dealloc方法仍然需要[array release],但由于您为它指定了nil,因此它不会产生任何影响。

// someArrayObj must have [array release] in its dealloc method
someArrayObj.array = [SomeClass getArray];

// But you can do it manually by assigning nil
someArrayObj.array = nil;