2011-03-29 7 views
0

이 질문은 간단한 질문 일 수 있지만 메모리 관리에 대한 확신이 있어야합니다. NSArray에서 검색된 객체를 릴리즈해야합니까?

@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)이 올바른지 있습니다

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

와하는 .m 파일에 다음 코드를 나는 .H 파일에 다음 코드를 그렇지 않은 경우 옳은 것과 그렇지 않은 것입니다. 또는 NSArray (NSMutableArray로 초기화되었다는 사실이 주어짐)가 객체를 보유하고 있지 않을 때 다른 구문을 유지합니까?

미리 감사드립니다.

답변

2

아니요. 공개하지 마십시오. 따라야 할 간단한 규칙은 다음과 같습니다.

개체를 할당하거나 보관하지 않은 경우 해제하지 마십시오.

+0

대단히 고맙게 따라 와서 조용하게 만들었습니다. – Mousa

2

해당 통화 중 어느 것도 맞지 않습니다. 할당했거나 보유한 객체는 release 여야합니다.

+0

... 한 번만. –

+0

답변 해 주셔서 감사합니다. – Mousa

관련 문제