2011-04-29 53 views
2

OK,看着這樣的:釋放的ivars

Apple docs: Declared Properties

如果您向下滾動到dealloc的記載:

「通常,在dealloc方法,你應該直接釋放對象的實例變量(而不是調用一組訪問和傳遞零作爲參數),如在本示例中示出:「

- (void)dealloc { 
    [property release]; 
    [super dealloc]; 
} 

」如果您使用的模ERN運行和合成實例變量,但是,你不能直接訪問實例變量,所以你必須調用訪問方法:」

- (void)dealloc { 
    [self setProperty:nil]; 
    [super dealloc]; 
} 

現在,我必須自己對iOS開發至少15到20本書。我不能說我所見過的這些書中提出一個任意代碼做其他任何事情比:

[someproperty release]; 

是否有令人信服的理由來編輯一串完美的作品以及採用蘋果的代碼文件建議?未來的工作如何?或者,它們幾乎相當?

回答

2

Apple的文檔似乎只適用於默認情況下啓用合成的情況。如果你關閉了它,這似乎是默認情況,你需要@synthesize,它可以讓你直接訪問變量。

就個人而言,我做的:

@synthesize someProperty=_someProperty; 

,這樣我就可以這樣做:

- (void)dealloc { 
    [_someProperty release]; 
    [super dealloc]; 
} 

更多見Jeff LaMarche's blog

1

在現代運行時中,不再需要爲屬性聲明實例變量,也不必在實現中編寫@synthesize。如果你的代碼已經聲明瞭實例變量,那麼沒有理由用調用set訪問器來替換調用release的代碼(你粘貼的第一個引號甚至聲稱)。

+0

我的印象是不需要@synthesize正在創建問題,所以現在需要它。 – 2011-04-29 02:25:24

+0

如果您啓用了綜合默認設置,則不需要@synthesize,您將失去直接訪問權限。完全清楚... – 2011-04-29 02:41:21