2013-10-27 116 views
-3

我用Xcode將我的項目切換到了ARC。他確實刪除了release命令,但我已經擁有的陣列 - 沒有property - 並且Xcode在轉換後沒有將它添加到它們中。使用ARC是否NSMutableArray需要屬性?

我必須將property設置爲NSMutableArray嗎?

.h 
NSMutableArray *array; 

.m 
array= [[NSMutableArray alloc] init ]; 

原因,我想,以避免它,是其如此惱人,添加它,不是增加同步到它,它似乎很舊。我只想設置和排列,然後繼續。沒有太多搞亂它。我想大多數人不需要那麼複雜,他們只需要一個簡單的排列,而不用考慮它的強大,弱點,同步它等等。

回答

2

ivars默認情況下很強大,那麼你不必強制增加財產。但財產非常有用,我建議你經常使用它們。

你可以使用財產,你也不是也被迫添加合成。你可以這樣做: 在.H

@property (nooatomic, strong) NSMutableArray *array; 

編譯器會生成getter和setter你沒有合成。

在.m中,在init(或自定義init,如果有的話)中使用直接訪問您的ivar並在其他地方使用屬性。

中的.m例如:

​​

別的地方在您的m使用setter和直接吸氣劑是這樣的:

- (void)myMethod{ 
     self.array = ... 
    } 
+0

非常感謝,但我沒有看到連一個優勢,使用它,它只是更行代碼,它給我沒有任何東西(getter和setter在這裏沒有關係,因爲NSArrays有自己的函數來使用它們,所以它的意義是什麼? – Curnelious

+0

@Curnelious:它是一行代碼,用於實例變量和一行代碼。對象「有他們自己的功能來使用它們。」一個屬性給你更好的封裝,只需很少的成本。 – Chuck

1

如果我沒有正確理解你的問題 - 沒有真的有什麼問題。只要保持原樣即可。來自iVar的參考很強大。因此,你的數組將保持,直到你設置array=nil(並且當然不包含任何其他stron引用)。

但是,爲了簡單起見,再加上使用OO概念的優點,我傾向於在.m文件的第二個接口節中創建iVars作爲屬性。 Hoever,這可能歸結爲個人風格。簡單的iVar也有優勢。所以當你對他們感到滿意時,堅持他們。

在這種情況下,如果將有用的代碼遷移到ARC,那麼將iVars轉換爲屬性(或向現有的iVar添加屬性聲明)並沒有真正的好理由。

+0

爲什麼我要在這種情況下使用屬性呢?它的更多行代碼,做我真的需要那個? – Curnelious

+0

這取決於您關注的內容。一個屬性是可覆寫的,一個iVar不是。 (afaik)然而,它的覆蓋性並不是免費的。所有getter和setter都必須在運行時綁定,這比訪問iVar(它只是最終結構的一個成員)性能更差。正如我所說,如果你不需要一個,那麼你不需要一個。 –

0

實例變量是在一個類中聲明的,其中該類的每個實例都獲取由該類聲明的實例變量的副本。

此外,您不需要將所有實例變量轉換爲屬性。

屬性實際上只是一個承諾,即某個類爲某些訪問者提供了某些語義。只有一個實例變量並不意味着你必須爲該伊娃提供訪問器。

請對下面鏈接的詳細例如: -

https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226-CH1-SW16

相關問題