Должен ли я освободить объект, который был извлечен из NSArray? - PullRequest
0 голосов
/ 29 марта 2011

Я знаю, что это может быть простой вопрос, но я должен убедиться, что я хорошо справляюсь с управлением памятью. У меня есть следующий код в файле .h:

@interface Class1 : NSObject {
    NSArray * _Objects;
}
@property (retain) NSArray * Objects;
@end

и следующий код в файле .m:

@implementation Class1
@synthesize Objects = _Objects;
#pragma mark -
#pragma mark Initializers
- (id)init {

    self = [super init];
    if (self) {
        NSMutableArray * objects = [[NSMutableArray alloc] init];
        NSObject * object1 = [[NSObject alloc] init];
        NSObject * object2 = [[NSObject alloc] init];
        NSObject * object3 = [[NSObject alloc] init];
        [objects addObject:object1];
        [objects addObject:object2];
        [objects addObject:object3];
        [object1 release];
        [object2 release];
        [object3 release];
    }
    return (self);
}
#pragma mark -
#pragma mark Some Method
- (void)method {
        for (NSObject * object in self.Objects) {
            // do some thing
            [object release]; // (1) ?
        }
        NSObject * object = [self.Objects objectAtIndex:0];
        [object release]; // (2) ?

        for (NSObject * object in _Objects) {
            // do some thing
            [object release]; // (3) ?
        }
        NSObject * object = [_Objects objectAtIndex:0];
        [object release]; // (4) ?
}

и у меня вопрос, все ли релизные звонки верны (от 1 до 4), а если нет, то что правильно, а что нет. или другая фраза, когда NSArray (учитывая тот факт, что он был инициализирован с NSMutableArray) сохраняет объекты, а когда нет?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Ни один из этих вызовов не является правильным. Вы должны только release объекты, которые вы выделили или сохранили.

2 голосов
/ 29 марта 2011

Нет. Вы не должны выпускать это. Вот простое правило:

Если вы не использовали или не сохранили объект, не отпускайте его.

...