2012-07-05 71 views
-1

我對Objective-C的內存管理感到困惑。 例如:我必須在這裏釋放對象嗎?

.h file 
@property(nonatomic,retain) NSString *myString; 

.m file 
@synthesize myString 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [arrayString count]; 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    //in this case,i have to check 
    if(self.myString != nil) 
     [myString release],self.myString = nil; 
    //and assign 
    self.myString = [arrayString objectAtIndex:indexPath.row]; 
    //or i need only assign 
    self.myString = [arrayString objectAtIndex:indexPath.row]; 
} 

任何人都可以向我解釋嗎? 非常感謝。

回答

0

你並不需要釋放,因爲屬性被定義爲「保留「,這意味着它在釋放前一個對象後保留傳遞的對象。

如果,而不是訪問您直接變量使用,那麼你需要手動管理釋放/保留屬性..

BTW:您可以將消息發送給nil對象......(所以不檢查它是零發佈它)

+0

謝謝Francesco – 2012-07-05 15:30:04

2

您只需要分配字符串..並將其分配給nil中的deallocviewDidUnload方法。

+0

你甚至不一定需要調用發佈。由於它是帶有'retain'限定符的屬性,因此您只需將該屬性分配給nil:'self.myString = nil;' – 2012-07-05 15:05:57

+0

爲什麼?我有一個財產與保留,我從來沒有分配給其他,但是當我調用[myProperty發佈]在dealloc或didUnload沒有crash.at在這裏,retainCount是0,但我可以釋放它。我不知道爲什麼 – 2012-07-05 15:29:47

0
if(self.myString != nil){ 
     [myString release],self.myString = nil; 
} 

這是不夠的:

if(self.myString != nil){ 
      self.myString = nil; 
    } 

至於你的問題,你只需要這樣:

self.myString = [arrayString objectAtIndex:indexPath.row]; 
+0

也'self.myString =零;'就夠了 – Francesco 2012-07-05 15:07:08

相關問題