0

これが私の方法です

- (void)populateLocationsToSort {

    //1. Get UserLocation based on mapview
    self.userLocation = [[CLLocation alloc] initWithLatitude:self._mapView.userLocation.coordinate.latitude longitude:self._mapView.userLocation.coordinate.longitude];

    //Set self.annotationsToSort so any new values get written onto a clean array
    self.myLocationsToSort = nil;

    // Loop thru dictionary-->Create allocations --> But dont plot
    for (Holiday * holidayObject in self.farSiman) {
        // 3. Unload objects values into locals
        NSString * latitude = holidayObject.latitude;
        NSString * longitude = holidayObject.longitude;
        NSString * storeDescription = holidayObject.name;
        NSString * address = holidayObject.address;

        // 4. Create MyLocation object based on locals gotten from Custom Object
        CLLocationCoordinate2D coordinate;
        coordinate.latitude = latitude.doubleValue;
        coordinate.longitude = longitude.doubleValue;
        MyLocation *annotation = [[MyLocation alloc] initWithName:storeDescription address:address coordinate:coordinate distance:0];

        // 5. Calculate distance between locations & uL
        CLLocation *pinLocation = [[CLLocation alloc] initWithLatitude:annotation.coordinate.latitude longitude:annotation.coordinate.longitude];
        CLLocationDistance calculatedDistance = [pinLocation distanceFromLocation:self.userLocation];
        annotation.distance = calculatedDistance/1000;

        //Add annotation to local NSMArray
        [self.myLocationsToSort addObject:annotation];
        **NSLog(@"self.myLocationsToSort in someEarlyMethod is %@",self.myLocationsToSort);**
    }

    //2. Set appDelegate userLocation
    AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];
    myDelegate.userLocation = self.userLocation;

    //3. Set appDelegate mylocations
    myDelegate.annotationsToSort = self.myLocationsToSort;    
}

太字の行では、self.myLocationsToSort は既に null です。値を nil に設定することは、基本的にそれを一掃し、再利用する準備ができていると思いましたか? このメソッドは、起動時に 1 回呼び出され、データが Web から取得されたときに NSNotification が受信された後に 2 回呼び出されるため、そうする必要があります。このメソッドを NSNotification セレクターから再度呼び出すと、新しい Web データが古いデータの上に書き込まれ、一貫性のない混乱した値が吐き出されます :)

4

1 に答える 1

2

に設定するとnil、そのオブジェクトへの参照が削除されます。ARC を使用していて、それがstrongそのオブジェクトへの最後の参照である場合、システムはオブジェクトを自動解放し、そのメモリを解放します。どちらの場合も、「クリーンアップして再利用できるようにする」わけではありません。オブジェクトを再割り当てして初期化する必要があります。すべてのオブジェクトを削除したいだけで、 を呼び出すことができるとmyLocationsToSort仮定するNSMutableArray場合

[self.myLocationsToSort removeAllObjects];

それ以外の場合は、する必要があります

self.myLocationsToSort = nil;
self.myLocationsToSort = [[NSMutableArray alloc] init];
于 2013-04-17T15:39:12.403 に答える