2012-03-02 101 views
4

我們已經在我們的iOS中使用id屬性創建了一個模型。這是我們目前使用的(這是iOS 5的順序)。NSNumber與NSInteger與NSObject屬性的對比

@property (nonatomic, assign) int userID; 

似乎目前工作正常。我想知道這是否會導致未來出現任何問題。

示例:我知道這意味着ID屬性本身不能存儲到plist中。但是,這是NSObject的一個屬性。如果我們將任何東西存儲到文件/核心數據/ nsuserdefaults /無論它可能是整個對象而不僅僅是這個屬性。

我想我的問題是...我們是否會因爲將它存儲爲int而不是NSNumber而導致自己遇到任何問題?

其次,將它存儲爲NSInteger會有什麼不同。我明白,這只是一個類型定義長或int取決於體系結構。由於我們只針對iPhone,它只是設置爲int是否重要?似乎不會在這種情況下產生任何影響。

+0

此鏈接將有所幫助.. [http://iphonedevelopertips.com/cocoa/nsnumber-and-nsinteger.html](http://iphonedevelopertips.com/cocoa/nsnumber-and-nsinteger.html)[http (http://stackoverflow.com/questions/6662730/nsnumber-vs-int](http://stackoverflow.com/questions/6662730/nsnumber-vs-int) – Anish 2012-03-02 03:42:43

回答

-1

使用int作爲NSObject子類中的屬性是很正常的。

根據您的平臺,NSInteger可能是int或比這long但另一方面,如果你使用intNSInteger,並且只要可以互換使用,因爲值不超過極限也沒關係一個int

+0

當然,你可以賦值給一個非對象(即標量類型)。 'assign'是唯一對'int'(或'NSInteger','float','BOOL'等)值有意義的屬性。刪除'assign'工作的唯一原因是'assign'是默認屬性,因此不指定setter語義屬性與指定'assign'相同。 – Caleb 2012-03-02 05:59:45

6

我想我的問題是...我們是否會通過將其存儲爲int而不是NSNumber來導致我們自己的任何 問題?

這真的取決於你要用這個值做什麼。如果你想把它當作一個對象(例如,可以將它存儲在NSArray或NSDictionary中),NSNumber可能會很方便。如果你只是想跟蹤價值,並且int適合你,那麼使用int就可以。

其次,將它作爲NSInteger 來代替,會有什麼不同。我明白,這只是一個類型定義爲長或int 取決於體系結構。由於我們只針對iPhone,所以它只是設置爲int?

我會去與NSInteger(和NSUInteger)。使用這些類型,您的代碼將自動爲您正在編譯的架構使用適當的大小。您可能只針對iOS,但您可能在運行於MacOS X上的iOS模擬器上運行代碼。因此,這就是兩個架構 - 而且您不知道未來iOS可能會發生什麼。

0

我能想到的唯一限制是如果int = 0是一個有效值或int沒有值(null)是一個重要的用例。

由於int總是用0初始化,所以您不會有可以檢查該屬性是否存在的情況。

在你的情況下,如果你想測試user_id是否存在,那麼它不可能使用像int這樣的基本數據類型,因爲它總會有一個值。

在另一種情況下,0可能是一個有效值(甚至在您的場景中 - 史蒂夫喬布斯在蘋果的許多流行文化參考中被開玩笑說是員工號碼0)。在這種情況下,每次使用0進行初始化可能是一個不必要的副作用,您將不得不處理。