1.在iOS開發中我們比較喜歡使用int類型的變量,可是你仔細研究過C語言中的int和OC中int的區別了嗎?
下面我們來分析下:
查到c語言中,int和long的字節數是和操作系統指針所占位數相等。
但c語言中說,long的長度永遠大于或等于int
Objective-C里,蘋果的官方文檔中總是推薦用NSInteger
原來在蘋果的api實現中,NSInteger是一個封裝,它會識別當前操作系統的位數,自動返回最大的類型。
定義的代碼類似于下:
if LP64 || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
else
typedef int NSInteger;
typedef unsigned int NSUInteger;
endif
You usually want to use NSInteger when you don't know what kind of processor architecture your code might run on, so you may for some reason want the largest possible int type, which on 32 bit systems is just an int, while on a 64-bit system it's a long.
總結:NSInteger與int的區別是NSInteger會根據系統的位數(32or64)自動選擇int的最大數值(int or long)。
2.聽你這么一說,那我以后全部用NSInteger吧,哈哈...那我們看下下面的問題
(如果你是這樣寫的,默默"喜歡"一下我的文章吧)
之前我們公司的iOS開發者,經常會寫出下面的代碼,最后都被我糾正了...
NSInteger type;
type=1;
NSString *Type=[NSString stringWithFormat:@"%d",type];
可能有朋友說,這段代碼沒有問題啊(你要是不深究的話,也不算問題哈)!其實我想說的是這邊會出現一個警告:
我們來看下這個警告:
這個警告實際上是類型不匹配的問題,那么怎么修改呢?
只要把"%d"--->"%zi"就好了.看修改后的代碼
NSInteger type;
type=1;
NSString *Type=[NSString stringWithFormat:@"%zi",type];
總結下:
"%zi"是OC特有的格式化輸入輸出控制字符串....有興趣的可以自己試下哈
PS:每天一篇小總結文章,都是iOS開發中遇到的小問題,喜歡的話,就關注我吧