int和NSInteger的區別(自Xcode5.1)
阿新 • • 發佈:2018-12-25
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型