2010-03-05 103 views
0

與iPhone上的objective-c:NSString stringByAppendingString內存問題

我想使用字符串進行追加,但是可以使用autorelease嗎?這是正確的嗎?

 
NSString *str1 = [[NSString alloc] initWithString:@"STR1"]; 
NSString *str2 = [[NSString alloc] initWithString:@"STR2"]; 

NSString *s = [[str1 autorelease] stringByAppendingString:[str2 autorelease]]; 

這會刪除* str1和* str2內存嗎?

並且例如,如果我有一個方法:

 
+(void) doSomething 
{ 
    NSString *str1 = [[NSString alloc] initWithString:@"STR1"]; 
    NSString *str2 = [[NSString alloc] initWithString:@"STR2"]; 

    NSString *s = [[str1 autorelease] stringByAppendingString:[str2 autorelease]]; 
    [[NSClassFromString(s) alloc] init]; 
} 

應我的dealloc的* S指針???

回答

3

一般規則是,如果您致電alloc,則必須在該資源上撥打release

因此,對於您的第一個示例,str1和str2 從內存中刪除,但是您不遵循約定您的autoreleases。取而代之的是自動釋放添加到分配線:

NSString *str1 = [[[NSString alloc] initWithString:@"STR1"] autorelease]; 
NSString *str2 = [[[NSString alloc] initWithString:@"STR2"] autorelease]; 

對於第二個例子,因爲你不是爲stringByAppendingString方法調用頁頭,你並不需要釋放s

通讀iPhone Memory Management指南。這是值得的前期投資,所以你不必在路上處理這些問題。之後,通過Akosma Software's博客文章進行閱讀。

+0

對不起,我mjme是str1和str2是userInterface,我編輯了文本 – okami 2010-03-05 15:49:48