以下の1行目と2行目の違いを知りたいだけです。
_subtitle = @"Test"; //Line 1
_subtitle = [NSString stringWithFormat: @"Test"]; //Line 2
私がその質問をした場合、それは MKAnnotation を使用して問題が発生したためです。次のメソッドでは、MKAnnotation の字幕デリゲート プロパティ (非アトミック、コピー、読み取り専用) を更新しようとしています。しかし、ライン2を使用するとゾンビが発生し、ライン1を使用するとゾンビが発生したように見えます.だから私の質問はなぜですか?
- (void) initCoordinateWithAddress:(NSString*)address;
{
self.address = address;
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString: address completionHandler:^(NSArray *placemarks,NSError *error)
{
CLPlacemark *place = [placemarks objectAtIndex:0];
_coordinate = place.location.coordinate;
_title = self.address;
_subtitle = @"Test"; //Line 1: don't crash
_subtitle = [NSString stringWithFormat: @"Test"]; //Line 2: crash
//_subtitle = [[NSString stringWithFormat: @"[%.2f,%.2f]", self.coordinate.latitude, self.coordinate.longitude] copy];
_isInit = YES;
[self.customDelegate didCalculateCoordinate: place.location.coordinate forAnnotation: self];
}];
}
私は実際にcopyメソッドを使用して問題を解決しましたが、1行目と2行目の違いはまだわかりません。違いを理解するのを手伝ってくれる人がいれば、感謝します。
編集:
1- ARC を使用していない
2- _subtitle は @synthesize subtitle = _subtitle; から来ます。サブタイトルは MKAnnotation プロトコルの一部であり、nonatomic、readonly、copy のプロパティがあります。
よろしく、 シリル