64位下,基本類型long從占用4字節變為占用8字節。要注意看一下程序中出現sizeof函數的地方,并注意盡量不要使用基本數據類型,改用對象類型:
NSArray *items = @[<a rel="nofollow">@1</a>, @2, @3];for (int i = -1; i < items.count; i++) { NSLog(@"%d", i);}數組.count返回值類型是NSUInteger,但這里與i比較時,若i為-1,-1會被隱式轉換為很大的正整數,導致計算出錯。一定要注意和這個變量相關的所有操作(賦值、比較、轉換)
這里將基本數據類型改為NSUInteger,初始值從0開始即可。此處只為舉例,遍歷還是用for-in或block更方便。
typedef NS_ENUM(NSInteger, UIViewAnimationCurve) { UIViewAnimationCurveEaseInOut, UIViewAnimationCurveEaseIn, UIViewAnimationCurveEaSEOut, UIViewAnimationCurveLinear};
1) unsigned long類型轉為NSNumber:
(unsigned long)items.count 改為NSNumber的@語法糖: @(items.count).
2) int類型轉string:
NSInteger i = 10086;NSString *string = @(i).stringValue;
32-bit下,BOOL被定義為signed char,@encode(BOOL)的結果是'c'
64-bit下,BOOL被定義為bool,@encode(BOOL)結果是'B'
編譯器已經默認禁用了這種使用,isa指針在32位下是Class的地址,但在64位下利用bits mask才能取出來真正的地址,若真需要,使用runtime的object_getClass 和object_setClass方法。
把target加上arm64編譯,靜態庫(.a)或者framework,就需要重新找支持64-bit的包.
會。
最后列一下官方文檔中的注意點:
int32_t, int64_t這種定長類型參考文章:
http://ios.jobbole.com/81561/
新聞熱點
疑難解答