两个iPhone内存管理问题
我有两个问题 1) 以下哪项将释放ob两个iPhone内存管理问题,iphone,memory,memory-leaks,memory-management,Iphone,Memory,Memory Leaks,Memory Management,我有两个问题 1) 以下哪项将释放ob - (void){ ClassOne *ob = [[ClassOne alloc] init]; // should I use autorelease here? self.O = ob; [ob release]; // is this correct ?? } 或 2) 有两个类,ClassOne和ClassTwo。ClassTwo中的一种方法是: - (void) takeParam:(ClassOne *pt) { // s
- (void){
ClassOne *ob = [[ClassOne alloc] init]; // should I use autorelease here?
self.O = ob;
[ob release]; // is this correct ??
}
或
2) 有两个类,ClassOne
和ClassTwo
。ClassTwo
中的一种方法是:
- (void) takeParam:(ClassOne *pt) {
// something going here
}
第三个类中有一个方法
- (void) runIt {
ClassOne *ob = [[ClassOne alloc] init];
[classTwoOb takeParam:ob];
}
对于
ClassOne
对象,我应该在哪里调用release?方法-release
只会减少所讨论对象的保留计数。当保留计数达到零时,运行时将调用-dealloc
- (void) runIt {
ClassOne *ob = [[ClassOne alloc] init];
[classTwoOb takeParam:ob];
}
如果您在任何时候发送alloc
、copy
或retain
消息,您必须稍后调用release
或autorelease
有关更多详细信息,请参见。使用
-release
方法只会减少相关对象的保留计数。当保留计数达到零时,运行时将调用-dealloc
- (void) runIt {
ClassOne *ob = [[ClassOne alloc] init];
[classTwoOb takeParam:ob];
}
如果您在任何时候发送alloc
、copy
或retain
消息,您必须稍后调用release
或autorelease
有关更多详细信息,请参阅。数字1可能是正确的
ClassOne *ob = [[ClassOne alloc] init]; // do i should use autorelease here ?
当您调用[ClassOne alloc]
时,您会得到一个retain计数为1的对象,并负责释放
self.O = ob;
假设self.O
是retain
属性而不是assign
属性,self.O
/ob
的retain计数为2
[ob release];
现在,self.O
/ob
的保留计数为1。此版本
与alloc
匹配。剩余的保留计数归self
所有,因此当self
完成时,您必须记住释放O
-(void)dealloc{
[O release]; // is this correct ??
}
好。您记得要释放O
。现在,当解除分配self
时,O
将完全释放。(注意:您应该在dealloc
末尾调用[super dealloc]
)
您应该在调用takeParam:
后释放ob
。方法负责保留它们想要保留的对象。如果takeParam:
将ob
存储在classTwoOb
上,则应在方法返回之前将其保留。如果不是,就不应该
在返回已创建对象的方法中使用autorelease
。这使调用者有机会保留对象,如果它想要它,或者不需要它很长时间。例外情况是用于创建对象的方法,这些方法应始终被称为alloc
、new
或*copy*
,并应返回引用计数为1的对象,使调用方负责发布
self.O = ob;
要真正了解Objective-C内存管理,我建议您阅读《内存管理编程指南》,尤其是第1部分可能是正确的
ClassOne *ob = [[ClassOne alloc] init]; // do i should use autorelease here ?
当您调用[ClassOne alloc]
时,您会得到一个retain计数为1的对象,并负责释放
self.O = ob;
假设self.O
是retain
属性而不是assign
属性,self.O
/ob
的retain计数为2
[ob release];
现在,self.O
/ob
的保留计数为1。此版本
与alloc
匹配。剩余的保留计数归self
所有,因此当self
完成时,您必须记住释放O
-(void)dealloc{
[O release]; // is this correct ??
}
好。您记得要释放O
。现在,当解除分配self
时,O
将完全释放。(注意:您应该在dealloc
末尾调用[super dealloc]
)
您应该在调用takeParam:
后释放ob
。方法负责保留它们想要保留的对象。如果takeParam:
将ob
存储在classTwoOb
上,则应在方法返回之前将其保留。如果不是,就不应该
在返回已创建对象的方法中使用autorelease
。这使调用者有机会保留对象,如果它想要它,或者不需要它很长时间。例外情况是用于创建对象的方法,这些方法应始终被称为alloc
、new
或*copy*
,并应返回引用计数为1的对象,使调用方负责发布
self.O = ob;
要真正学习Objective-C内存管理,我建议您阅读《内存管理编程指南》,特别是关于