大家好,我還是iPhone的新手,但對其他編程語言有着豐富的經驗。 Obj-C存儲管理和釋放/保持正確的東西,讓我拉我的頭髮。我知道這個概念,我知道「有一次我明白這很容易」,但我還沒有完全沉浸在這裏,這讓我發瘋。在這裏,我有一個類和方法的簡單代碼片段,只是將一個字符添加到現有的字符串,這是合成的,因此用作類專有...該類例如稱爲myClass ...正確地釋放並保留NSString *
myClas.h
@interface myClass : NSObject {
@private
NSString* someCommonString;
}
@propery (retain, nonatomic) NSString* someCommonString;
myClass.m
...
@synthesize someCommonString;
- (id) init
{
self = [super init];
if(self)
{
someCommonString = [[NSString alloc] initWith String:@"one "];
}
}
- (NSString*) appendString:(NSString*) stringToAdd
{
NSString* result = [someCommonString stringByAppendingString: stringToAdd];
return result;
}
- (void) doTheJob
{
NSString* test1 = @"two ";
NSString* test2 = [[NSString alloc] initWithString: @"three "];
NSString* test3 = [NSString stringWithFormat:@"four "];
self.someCommonString = [self appendString:test1];
self.someCommonString = [self appendString:test2];
self.someCommonString = [self appendString:test3];
NSLog(@"%@", someCommonString);
}
- (void) dealloc
{
[someCommonString release];
[super release];
}
...
好吧,以後我ALLOC myClass的,執行doTheJob方法,我應該在someCommonString類proprety有@ 「一二三四」。我知道這是工作,但也是地獄般泄漏。 test1,test2和test3是初始化NSString的三種方法,只有test2應該被釋放,這是非常明顯的,但是我更擔心將它們作爲參數傳遞給appendString方法時會發生什麼。因爲在那裏我知道我有一個泄漏,但不知道如何處理1. stringToAdd參數[我應該擔心它在appendString方法嗎?] 2.結果 - >如果我autorelease結果,我不知道結果將在何處被釋放。 3. appendStringMethod中的sommeCommonString,我是否應該保留它,釋放它還是讓它獨立?
哈:)
非常感謝!儘管stringByAppendingString不是自動發佈的 – cybercow 2010-09-17 12:16:33