2013-10-31 138 views
1

我可以在同一個類的實例方法中釋放伊娃嗎?因爲我想再次alloc-init。這是否與-(void)dealloc中的其他[_myNSStringIvar release];衝突?我可以在同一類的實例方法中釋放伊娃嗎? (Objective-C)

// in the middle of an instance method 
    if(_myNSStringIvar != nil){ 
     [_myNSStringIvar release]; 
    } 

    _myNSStringIvar = [[NSString alloc] initWithString:(NSString *)[aDictionary objectForKey:@"key"]]; 

回答

4

只要不需要引用對象,就可以釋放。在發佈之前,您甚至不必檢查nil,因爲您只需將release發送到nil即可。

[_myNSStringIvar release]; 
_myNSStringIvar = [[NSString alloc] initWithString:(NSString *)[aDictionary objectForKey:@"key"]]; 

你也不必alloc] init]一個新的字符串對象,而不是複製現有對象:

[_myNSStringIvar release]; 
_myNSStringIvar = [aDictionary[@"key"] copy]; 

這樣的話,你只要aDictionary[@"key"]是不可改變的保留和複製,如果它是一個NSMutableString對象。現在

如果您使用與copy屬性的屬性,你甚至不需要手動release有:

@property (copy) NSString *myNSString; 
... 
self.myNSString = aDictionary[@"key"]; 

舊的對象是在二傳手釋放,新的將被複制。

相關問題