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

Umb*_*rto 1 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];
}
Run Code Online (Sandbox Code Playgroud)

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

-(void) setDistanceUnit {

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

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

我试着到处寻找,但到目前为止我找不到任何东西.

在此先感谢,翁贝托

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

Bol*_*ock 5

如果您distanceString是一个保留属性,则在不self设置崩溃的情况下分配它,因为您绕过了setter,并在不保留字符串的情况下分配字符串.因此,当字符串在发送到自动释放池时被释放时,您的应用程序崩溃了.

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

  • 这是我不喜欢点符号的原因之一.它为点运算符和赋值运算符增加了歧义. (4认同)