iPhone内存泄漏帮助

时间:2010-08-11 20:56:04

标签: iphone objective-c cocoa instruments

我是iPhone开发的新手,我第一次通过Intruments Leaks工具运行我的iPhone应用程序,并发现我的ListViewController dataArray方法泄漏。

当我点击列表时,它显示代码,并且几行在它们旁边有百分比。据推测,它们是泄漏记忆的线条。我已粘贴代码和下面的百分比:

- (NSArray*) dataArray {
   MapViewController *map = mainWindow.mainView.mapView;
NSMutableArray *data = [NSMutableArray arrayWithCapacity: 0]; /** REPORTS 25.3% HERE **/

if (selectedIndex == 1 || selectedIndex == 0)
 [data addObjectsFromArray: DataSource.data]; /** REPORTS 7.4% HERE **/

if (selectedIndex == 2 || selectedIndex == 0)
 [data addObjectsFromArray: DataSource.additionalData]; /** REPORTS 67.4% HERE **/

   [data sortUsingSelector:@selector(compareAnnotation:)];

   dataArrayNeedsUpdating = NO;
[data retain];
dataArray = data;

   return data;
}

我可以在该代码中更改任何内容以防止泄漏,还是需要在调用代码中进行更改?

提前致谢,

1 个答案:

答案 0 :(得分:5)

如果在调用此方法时dataArray正在存储值,则会泄漏,因为在覆盖旧值之前不会释放旧值。简单的解决方案是使用setter(可能是@synthesize生成的setter)并更改行

[data retain];
dataArray = data;

更简单(更传统)

[self setDataArray:data];

或者,如果您愿意,

self.dataArray = data;

之间的区别
myMemberVariable = somePointerToAnObject;

self.myMemberVariable = somePointerToAnObject;

是新的Objective-C编码器的一个微妙的陷阱。