我有一个简单的问题,在类中我有一个带属性保留的变量
//Classs ArrayClass has this array
@property(nonatomic, retain) NSMutableArray *array;
现在我做的时候
self.array = [SomeClass getArray];
我需要释放数组......
现在如果我有ArrayClass的对象和我做
arrayClassObj.array = [SomeClass getArray];
所以在这种情况下,是否调用了setter方法?在这种情况下我是否需要释放。
答案 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;