Objective C自动释放

时间:2011-02-05 14:59:31

标签: objective-c autorelease

你好我不完全理解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

所以为了解决这个问题,我提出了一个保留。现在我需要手动释放这个对象吗?

3 个答案:

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