你好我不完全理解obj-C中的autorelease函数调用。
@interface A{
id obj;
}
@implementation A
-(void)myMethod;
{
obj = [BaseObj newObj]; //where newObj is a method like :[[[BaseObj alloc]init]autorelease];
}
-(void)anotherMehtod;
{
[obj someMeth]; //this sometimes gives me EXC_BAD_ACCESS
}
@end
所以为了解决这个问题,我提出了一个保留。现在我需要手动释放这个对象吗?
答案 0 :(得分:4)
如果您是对象的所有者,则有责任将其发布。
如果您至少完成了以下某项操作,则成为对象的所有者:
alloc
retain
copy
有关详细信息,请参阅Object Ownership and Disposal
答案 1 :(得分:0)
是。规则是,如果您保留对象,您还有责任在iOS中发布它。
答案 2 :(得分:0)
与Obj-C中的所有其他静态方法一样[BaseObj newObj]
仅存在于此方法末尾的方法-(void)myMethod
中(大致)obj
从自动释放获取-release
消息池。
如果您想保留此对象,请使用[[BaseObj newObj] retain]
或[BaseObj alloc] init]
并在-dealloc
或必须时将其发布。
例如:
@interface A{
id obj;
}
@implementation A
-(void)myMethod
{
[obj autorelease];
obj = [[BaseObj newObj] retain]; //where newObj is a method like :[[[BaseObj alloc]init]autorelease];
}
-(void)anotherMehtod;
{
[obj someMeth]; //this sometimes gives me EXC_BAD_ACCESS
}
-(void)dealloc
{
[obj release];
[super dealloc];
}
@end