1
我是iPhone新手,我刚刚通过Intruments Leaks工具第一次运行我的iPhone应用程序,并使用ListViewController dataArray方法发现泄漏。iPhone内存泄漏帮助
当我点击列表时,它显示了代码,并且几行代码旁边有百分比。据推测他们是内存泄漏的线路。我贴的代码和下面的百分比:
- (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;
}
有什么我可以在更改代码以防止泄漏,或将需要调用代码进行的更改?
由于提前,
本
这似乎已经修复它,谢谢!你能解释(或链接到)myMemberVariable和self.myMemberVariable之间的区别吗? – 2010-08-11 22:22:23
对象变量(在.h文件的@interface中定义的)是所有对象方法中的局部变量(在返回类型之前用' - '定义的变量,这与类方法相反,它们是'+' “)。所以你总是可以通过名字直接引用你的变量。这是你所做的。点符号是属性的简写。如果使用它来访问该值,则会调用具有相同名称的方法(例如[self myMemberVariable]),如果使用它来设置值,则会调用[self setMyMemberVariable]。通常情况下,当... – 2010-08-11 22:34:21
......你@合成一个属性时会自动执行这些方法。二传手在这里是相关的。自动创建的setter将释放旧值(如果属性是'retain'属性),保留新值并设置变量。所有这些都会更清楚一些,但是惯例是用与您的实例变量(或“ivar”)相同的名称命名您的属性,所以最终结果是它们看起来非常相似。 – 2010-08-11 22:36:01