1

ディーラーにあるCarオブジェクトをリリースしたいと思います。私はそれを行う正しい方法が何であるか知りたいです。NSMutableArray Inventoryは、特定のディーラーの車を保管します。そこで、削除機能をユーザーに提示したいので、ユーザーはVin番号を使用して車を選択して削除できます。しかし、私が車を見つけて、機能しないリファレンスをリリースしようとすると。配列からオブジェクトを削除してから、参照を解放する必要がありますか?私はObjectiveCにかなり慣れておらず、初期の学習段階にあります。ありがとうございました。

#import "Dealer.h"
#import "Address.h"
#import "PhoneNumber.h"

@implementation Dealer

static NSInteger dealerIdAllocater = 0;

-(id) init{
    self = [super init];
    self.dealerId = ++dealerIdAllocater;
    self.addressList = [[NSMutableArray alloc] init];
    self.inventory = [[NSMutableArray alloc] init];
    return self;
}

@synthesize dealerId, name, addressList, inventory;

-(void)addCarInInventory:(Car*)car{
    [self.inventory addObject: car];
}

-(void)displayAddresses{
    for(Address *address in self.addressList){
        NSLog(@"Street Address: %@", address.streetAddress);
        NSLog(@"City: %@", address.city);
        NSLog(@"State: %@", address.state);
        NSLog(@"Country: %@", address.country);
        for(int i=0; i<[address.phoneNumber count]; i++){
            PhoneNumber *phoneNumber = [address.phoneNumber objectAtIndex:i];
            NSLog(@"Phone Number %i, %@", i, phoneNumber.phoneNumber);
        }
        NSLog(@"--------------");
    }
}

-(void)displayInventory{
    for(Car *car in self.inventory){
        [car displayInformation];
    }
    NSLog(@"--------------");
}

-(Car *)findCarById:(NSString *)vinNumber{
    for(Car *car in self.inventory){
        if ([vinNumber isEqualToString:car.vinNumber]) {
            return car;
        }
    }
    return nil;
}

@end
4

1 に答える 1

1

配列からオブジェクトを削除してから、参照を解放する必要がありますか?

はい、sなどのコンテナNSMutableArrayは、オブジェクトに追加されると、オブジェクトの保持カウントを1つ増やします。これは、コンテナが常にオブジェクトへの有効な参照を保持するようにするためです。コンテナからオブジェクトを削除すると、保持カウントが1ずつ減ります。

于 2013-02-15T10:01:39.650 に答える