2011-03-29 31 views
0

我知道這可能是一個簡單的問題,但我必須確保我在管理內存方面進展順利。 我在.h文件中下面的代碼:我應該釋放從NSArray中檢索到的對象嗎?

@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

非常感謝你讓安靜簡單的遵循。 – Mousa 2011-03-29 10:26:54

2

這些調用都不正確。您只應該分配或保留release對象。

+0

...然後只有一次。 – 2011-03-29 10:25:39

+0

謝謝你的回答。 – Mousa 2011-03-29 10:28:25

相關問題