2010-02-01 48 views
1

這是真的說,當編程爲iphone時使用整數,你不合成它們,你不釋放它們。objective c iphone整數

如果是真的,有人可以解釋爲什麼?

我每次嘗試時都會收到錯誤。 另外,如果我設置@property爲整數值,我也會得到錯誤

+0

什麼錯誤? ___ – kennytm 2010-02-01 16:04:07

回答

2

您可以合成int -s。但你必須聲明爲assign -Properties:

@property(assign) int X; 
5

在Objective-C,一個int爲基本類型,然而一個NSNumber(或其他類似的東西)的對象。原始類型,因爲它們不支持許多的事情要做對象(如getter和setter方法),只能宣佈

@property(assign) int x;

同樣,你不釋放他們,因爲這樣做將意味着你」重新發送一個-release消息到一個不支持消息的原語。你可以@synthesize@dynamic他們,但只有當你給他們適當的(分配)財產。

短版本:像int這樣的原語沒有消息或方法。不要試圖給他們一些。

+2

呃...你必須'@綜合'它是因爲你宣佈它是@屬性... – 2010-02-01 16:10:31

+0

@Dave:不,你可以'@ dynamic'它也可以。 – kennytm 2010-02-01 16:13:35

+0

@Dave DeLong:好點,謝謝 - 還不完全清醒:) – Tim 2010-02-01 16:15:47

1

如果您將整數聲明爲'NSInteger'或C樣式的基元int,那麼您所說的是真實的。但是,如果您使用的是NSNumber類,則不會。讓我解釋一下:

NSInteger不是一個Objective-C類。它不過是一個整數的同義詞。 NSInteger定義如下:

#if __LP64__ || NS_BUILD_32_LIKE_64 
    typedef long NSInteger; 
    typedef unsigned long NSUInteger; 
#else 
    typedef int NSInteger; 
    typedef unsigned int NSUInteger; 
#endif 

NSNumber是一個Objective-C類,也是NSValue的一個子類。可以從有符號或無符號字符,短整型,整型,長整型,長整型,浮點型,雙精度型或BOOL創建NSNumber對象。 其中,NSNumber只能用於需要對象的NSArray等集合,但NSInteger不能直接在那裏使用。

2

兩點意見:

  • 的NSNumber比,也就是說,詮釋慢得多。一般來說,如果您可以避開使用標量值,那就這樣做。

  • 定義屬性時,儘可能使用'nonatomic'。它允許顯着的性能提升(當然,如果您有多個線程在其上運行,有一些風險)。

+0

+1優點 – 2010-02-01 17:21:58