0
我寫了一個非常基本類與新的ARC和訪問器方法玩,只是爲了感受他們如何工作。從我讀過的,ARC應該取代手動引用計數,對吧?但是,我的訪問器方法出現問題。Obj-C訪問器和ARC
下面是我的Container
我的類接口/實現:
// interface
@interface Container : NSObject {
NSMutableString *string;
}
- (NSMutableString *)string;
- (void)setString:(NSMutableString *)aString;
@end
// implementation
@implementation Container
- (NSMutableString *)string
{
return string;
}
- (void)setString:(NSMutableString *)aString
{
string = aString;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"inner string = %@", string];
}
@end
它似乎好對我來說,所有的引用計數的細節是由ARC,我相信處理。發生在主方法的問題:
Container *myContainer = [[Container alloc] init];
NSMutableString *aString = [NSMutableString stringWithString:@"Hello!"];
[myContainer setString:aString];
NSLog(@"%@", myContainer);
[aString setString:@"Bye!"];
NSLog(@"%@", myContainer);
aString = [myContainer string];
[aString setString:@"Bye, again!"];
NSLog(@"%@", myContainer);
似乎aString
指向string
成員變量,當我改變aString
這意味着我也改變string
它。我試圖從main()
方法釋放aString
,但後來我得到一個編譯器錯誤。我該如何解決?我是否使用copy
方法,或者有其他方法嗎?
ARC環境下的變量將用'strong'參考創建。如果您需要複製存儲在指針中的值(因爲它似乎是上述情況),則您已將顯式聲明屬性爲複製或創建一個setter方法來複制存儲在變量中的值(這一直是這種情況ARC不會/不應該影響它)。 – Rog 2012-03-12 05:10:02
所以我應該寫這個:'string = [aString copy]'?這會解決問題嗎? – rcplusplus 2012-03-12 05:12:38
你不要在ARC下調用'release/retain/dealloc',讓編譯器爲你做。 – neevek 2012-03-12 05:20:43