根据文档,你每个alloc或保留一个版本(等) 然而,当使用retain propertys时呢?
例如:
HEADER
@property(retain)UIView *someView;
IMPLEMENTATION
/*in some method*/
UIView *tempView = [[UIView alloc] init]; //<<<<<ALLOC - retain count = +1
[tempView setBackgroundColor:[UIColor redColor]];
self.someView = tempView; ///<<<<<RETAIN - retain count = +2
[tempView release]; ///should I do this?
或其他版本的IMPLEMENTATION
self.someView = [[UIView alloc] init]; //<<<<<ALLOC & RETAIN - retain count = +2
//now what??? [self.someView release]; ????
编辑:我没说清楚,但我想在两种情况下都做什么,而不仅仅是第一次。
答案 0 :(得分:3)
/*in some method*/
UIView *tempView = [[UIView alloc] init]; //<<<<<ALLOC - retain count = +1
[tempView setBackgroundColor:[UIColor redColor]];
self.someView = tempView; ///<<<<<RETAIN - retain count = +2
[tempView release]; ///should I do this? // YES!!!!
你还应该在[super dealloc]之前释放你的dealloc方法中的所有retain属性。
答案 1 :(得分:0)
您的第一个版本是正确的。对视图只有一个持续引用,因此保留计数为1是合适的。
答案 2 :(得分:0)
对于第二个示例,您可以使用autorelease
:
self.someView = [[[UIView alloc] init] autorelease];