1. 程式人生 > >int和NSInteger的區別(自Xcode5.1)

int和NSInteger的區別(自Xcode5.1)

Xcode一直沒有升級,因為網速不行,就一直拖著沒升,前幾天把它給升級了,然後發現了一個問題。

我的專案沒有那麼多警告啊,xcode升級之後就有好幾十個警告,這是怎麼回事?


都是這樣的警告,是為什麼呢?

找了一番之後才發現,是int 和NSInteger的問題,以前一直沒有注意

比如說

 UIButton * btn =(UIButton *)sender;

int i= btn.tag;

一直是這樣寫的,沒有發現什麼問題呀

但是現在問題來了

i 是 int型

btn.tag 是 NSInteger型

那這兩者到底有什麼區別呢?

當你不知道程式執行哪種處理器架構時,你最好使用NSInteger,因為在有可能int在32位系統中只是int型別,而在64位系統,int可能變是long型。


除非不得不使用int/long型,堅持使用NSInteger。

NSInteger/NSUInteger是一種動態定義的型別,在不同的裝置,不同的架構,有可能是int型別,有可能是long型別。

為了更簡單的知道NSInteger和long的大小,只需要記住它們的大小總是等於指標的大小,即在32bit系統中是32bit,在64bit系統大小總是64bit。

現在的解決方案是:

方案一:把所有徘迴於int和NSInteger的資料轉化一下

int row =[[ NSNumber numberWithInteger:btn.tag ]  intValue];

方案二:把int型改為NSInteger型