有一件事我不明白關於ARC:我們應該如何處理使用[... copy]
創建的局部變量?如果我使用(copy)
標誌創建一個屬性,ARC將自動處理這個問題,但據我所知,變量沒有__copy
標誌。是否允許使用ARC在ObjC中調用[obj copy]?
@interface Foo : NSString
@end
@implementation Foo
- (void) dealloc {
NSLog(@"%p deallocated", self);
}
- (NSUInteger) length {
return 1;
}
- (unichar) characterAtIndex: (NSUInteger) i {
return 'x';
}
@end
- (void) foo {
Foo *f = [[Foo alloc] init];
NSLog(@"%p", f);
Foo *f2 = [f copy];
NSLog(@"%p", f2);
}
我得到的是::
我曾與這樣的代碼測試這個
0x102406530
0x102015f10
0x102406530 deallocated
我從來沒有得到「0x102015f10解除分配」,這將表明複製的變量沒有得到釋放。它甚至不會自動發佈,因爲當我做出另一種返回自動釋放對象的方法[Foo foo]
時,我在一會兒之後就收到了「釋放」消息。
那麼有沒有什麼辦法可以讓它在沒有轉換成屬性的情況下被釋放?
如果你打算做這個實驗,那麼你最好在一個完全理解內存管理的類上工作。 'NSString'有誰知道什麼是內存優化,所以它不給你一個很好的基礎。 'NSString'也是類集羣的一部分,並且繼承並不像你所做的那樣簡單,還有更多需要跳過的環節。 –
@ Paul.s所以你是英國人,對吧?我不知道存在'你'。這是什麼構造? – 2012-11-03 23:08:57