2012-09-27 26 views
0

下面是一個代碼示例來說明我的意思:爲什麼要在Objective-C中自動釋放自己的屬性?

- (void) setup { 
    [self setupObjectModel]; 
    [self setupStoreCoordinator]; 
} 

- (void) setupObjectModel { 
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"]; 
    self.managedObjectModel = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] autorelease]; 
} 

回答

1

如果managedObjectModelstrong屬性或屬性retain定義,二傳手會自動保留傳入的參數,從而autorelease荷蘭國際集團將阻止內存泄漏(如果你不這樣做,將NSManagedObjectModel的保留數爲2雖然只有managedObjectModel指向它。)

這相當於

_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 

假設setter具有默認行爲

+0

但是,爲什麼不釋放而不是autorelease? –

+0

如果你釋放而不是'autorelease',在'release'調用結束時,對象將檢查它的'retaincount'並且看到它是零,並且會在** managedObjectModelis之前調用'dealloc' ** '二傳手將有機會保留它。然後你的財產將指向一個解除分配的對象,並在第一次提升'SEGFAULT'。 – Olotiar

+0

如果您仍然有疑問,請提出問題,我會盡力回答。否則,請將此答案標記爲已接受。 – Olotiar

相關問題