我正在开发一个IOS应用程序。我用XCode工具进行了分析,如果我不写autorelease,然后显示“潜在的内存泄漏”消息。这是以下代码块中的错误。我不确定。IOS @property,@synthesize内存泄漏
//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];
}
这不是一个巨大的东西,但通常你会做'@合成的WebAPI = _webApi;'我会得到的内存泄漏有时并改变这种方式似乎帮助。我相信'iOS6'这个是自动完成的,所以你根本不需要'@ synthesize'。 – Popeye
也许你可以分享一些关于你的web服务类的细节。仪器会告诉你泄漏物体的分配位置,而不是泄漏的根源。你是否通过静态分析器运行你的代码(“分析”Xcode的“产品”菜单)?可能是一个保留周期(例如,引用'self'的块变量)或类似重复保留Web服务对象的'NSTimer'。 – Rob
另外,您是否确认视图控制器本身正在发布(即视图控制器本身没有保留周期)?也许在'dealloc'中放置断点或'NSLog'并确保它被调用。 – Rob