我应该释放从NSArray中检索到的对象吗?

时间:2011-03-29 10:19:08

标签: objective-c memory-management nsarray

我知道这可能是一个简单的问题,但我必须确保我在管理记忆方面做得很好。 我在.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 个答案:

答案 0 :(得分:2)

没有。你不应该发布它。一个简单的规则是:

  

如果您没有分配或保留对象,则不要释放它。

答案 1 :(得分:2)

这些电话都不正确。您应该只有release已分配或保留的对象。