Leg*_*10n 2 memory-management objective-c
我是一个客观的新手,我在内存管理方面遇到了一些问题,我已经阅读了苹果的内存管理政策,但是我需要在这里澄清一下,我猜这很简单,但我会想问你我是不对的:
鉴于此属性:
@interface Test : NSObject {
NSArray *property1;
}
@property (nonatomic,retain) NSArray* property1;
@end
...
//And its implementation:
@implementation Test
@synthetize property1;
-(id) init {
if (self=[super init]) {
self.property1=[[[NSArray alloc] initWithCapacity:5] autorelease];
}
return self;
}
-(void) dealloc {
[super dealloc];
[property1 release];
}
Run Code Online (Sandbox Code Playgroud)
@结束
在init方法中向分配的对象发出一个Autorelease消息是正确的吗?我在apple的文档中这样做,说开发者应该释放每个分配的对象,然后,我认为,alloc sets retain count为1,然后属性(非原子,保留)加1,所以retain == 2,然后自动释放子1,当调用dealloc方法时,property1被释放并保留count == 0,我是对的吗?
你的内存管理是正确的,尽管Apple(以及很多其他人)通常建议你不要在初始化方法中使用访问器,因为访问器除了简单地设置一个你的类可能尚未设置处理的实例变量之外,还有副作用.在这种情况下,您不希望自动释放,因为您需要对象的所有权.
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |