iphone内存管理:分配和保留属性

时间:2010-12-28 17:35:13

标签: iphone objective-c memory-management

根据文档,你每个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]; ????
编辑:我没说清楚,但我想在两种情况下都做什么,而不仅仅是第一次。

3 个答案:

答案 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];