<code>
//header file has appropriate declarations but not included here:
#import "AddressCard.h"
@implementation AddressCard;
-(NSString *) name
{
return name;
}
//Recommended code:
-(void) setName: (NSString *) theName
{
[name release]
name = [[NSString alloc] initWthString: theName];
}
//Incorrect code according to Kochan:
-(void) setName: (NSString *) theName
{
[name release]
name = [NSString stringWthString: theName];
}
//rest of class implementation code snipped
@end
<code>
所以我看到堆棧溢出的代碼不是我的代碼,我不想拿它或任何東西,但我只是有一個關於目標C中的這段代碼的快速問題。 (void) setName: (NSString *) theName
方法爲什麼我們必須做[name release]
然後。爲什麼我們不能簡單地說name = theName
。難道那只是將theName
變量作爲setName
方法中的參數傳遞給原始name
變量?複製變量名稱
對不起,如果這是一個不好的問題,但我是新來的目標C和有點困惑來自java背景的內存管理。
此代碼非常舊。內存管理髮生了很大變化,您不再需要包含'release'方法。 –
哦,我不知道這一點。所以在setName方法中,你只需要做name = theName;或者你是否只有name = [[NSString alloc] initWthString:theName];沒有[名稱發佈]代碼?謝謝你的回答。 – Bobby
兩者都是不正確的和古老的。如果'name'和'name'是同一個實例,'name'是唯一保留字符串的指針,'release'在添加之前會將其刪除。需要檢查'theName'!='name'。但這是非ARC內存管理。 – zaph