Iphone应用程序。没有self关键字崩溃

时间:2010-12-29 22:21:19

标签: iphone objective-c

我会尽量让自己变得清晰。让我们从头开始。我有一个带有tableview的应用程序,其中包含一个距myLocation有距离的地方列表。现在,每当我在gps位置获得更新时,我都会运行以下代码

- (void)locationUpdate:(CLLocation *)location {
 myLocation = location;
 for (Trek * trek in list) {
  CLLocation *loc = [[CLLocation alloc] initWithLatitude:[trek latitude_start]             longitude:[trek longitude_start]];
  double dis = [locationManager getDistance: loc];
  [trek setDistance:dis];
  [trek setDistanceUnit];
  [loc release];
 }

 [self.tableView reloadData];
}

现在这段代码[trek setDistanceUnit];调用

-(void) setDistanceUnit {

 if (self.distance < 1000.0) 
  self.distanceString = [NSString stringWithFormat:@"%.0lf m", self.distance];
}

现在,如果我只使用distanceString应用程序崩溃。现在我认为这可能与这些更新可能同时(并行)运行视图绘制单元格所需的访问这一事实有关。任何人有任何想法?我可以发布更多代码,如果有用,我只是不想过多发布这篇文章太久了。

我试图到处搜寻,但到目前为止我找不到任何东西。

提前致谢, 翁

PS现在应用程序正在运行,但我想了解发生了什么。

1 个答案:

答案 0 :(得分:5)

如果您的distanceString是保留属性,则在没有self的情况下进行分配会将其设置为崩溃,因为您绕过了setter,并在不保留字符串的情况下分配字符串。因此,当字符串在发送到自动释放池时被解除分配时,您的应用程序崩溃。

通过使用@synthesize并使用点符号(或setDistanceString:)合成访问器,对象将为您保留字符串,以便它始终具有指向它的指针(直到它被释放) )。