我正在开发一个IOS应用程序。我用XCode intruments进行了分析,如果我不写自动释放然后显示“潜在的内存泄漏”消息。这是下面的代码块中的错误。我不确定。
//TransferList.h
@property (nonatomic,retain) WebServiceAPI *webApi;
//TransferList.m
@implementation TransferList
@synthesize webApi;
- (void)viewDidLoad
{
[super viewDidLoad];
self.webApi = [[[WebServiceAPI alloc] init] autorelease];
}
- (void)dealloc
{
[webApi release];
[super dealloc];
}
答案 0 :(得分:3)
如果这是在MRC下编译的(显然是),那么没有autorelease
就会出现内存泄漏。这是绝对正确的。
alloc
表示您想要对象的所有权
分配给retain
的财产也声称拥有权(由财产)
在dealloc
中,您正在释放该属性(该属性将不再拥有该对象)。
如果没有autorelease
,viewDidLoad
将永远不会失去对象的所有权,并且您将有内存泄漏,因为该对象将永远不会被释放。
- (void)viewDidLoad {
[super viewDidLoad];
//create the object and get the ownership
WebServiceAPI *api = [[WebServiceAPI alloc] init];
//let our property also own this object
self.webApi = api;
// I don't want to own the object anymore in this method
// (of course, using autorelease is simpler)
[api release];
}
- (void)dealloc {
//our property doesn't want to own the object any more
[webApi release];
[super dealloc];
}