Ben*_*ing 1 iphone cocoa objective-c 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;
}
Run Code Online (Sandbox Code Playgroud)
我可以在代码中更改任何内容以防止泄漏,还是需要在调用代码中进行更改?
提前致谢,
本
如果在调用此方法时dataArray正在存储一个值,它将泄漏,因为在覆盖它之前不会释放旧值.简单的解决方案是使用setter(可能是@synthesize生成的setter)并更改行
[data retain];
dataArray = data;
Run Code Online (Sandbox Code Playgroud)
更简单(更传统)
[self setDataArray:data];
Run Code Online (Sandbox Code Playgroud)
或者,如果您愿意,
self.dataArray = data;
Run Code Online (Sandbox Code Playgroud)
和...之间的不同
myMemberVariable = somePointerToAnObject;
Run Code Online (Sandbox Code Playgroud)
和
self.myMemberVariable = somePointerToAnObject;
Run Code Online (Sandbox Code Playgroud)
是新的Objective-C编码器的一个微妙的陷阱.
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |