国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS64位編程

2019-11-14 19:34:55
字體:
來源:轉載
供稿:網友

1.拒絕基本數據類型和隱式轉換

1)基本數據類型

64位下,基本類型long從占用4字節變為占用8字節。要注意看一下程序中出現sizeof函數的地方,并注意盡量不要使用基本數據類型,改用對象類型:

  • int -> NSInteger
  • unsigned -> NSUInteger
  • float -> CGFloat
  • 動畫時間 -> NSTimeInterval
  • …

2)隱式轉換

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更方便。

2.使用新版枚舉

typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {    UIViewAnimationCurveEaseInOut,    UIViewAnimationCurveEaseIn,    UIViewAnimationCurveEaSEOut,    UIViewAnimationCurveLinear};

  

3.替代Format字符串

1) unsigned long類型轉為NSNumber:

(unsigned long)items.count 改為NSNumber@語法糖: @(items.count).

2) int類型轉string:

NSInteger i = 10086;NSString *string = @(i).stringValue;

4. 64-bit下的BOOL

32-bit下,BOOL被定義為signed char,@encode(BOOL)的結果是'c'
64-bit下,BOOL被定義為bool,@encode(BOOL)結果是'B'

5.不直接取isa指針

編譯器已經默認禁用了這種使用,isa指針在32位下是Class的地址,但在64位下利用bits mask才能取出來真正的地址,若真需要,使用runtime的object_getClass 和object_setClass方法。

6.解決第三方lib依賴和lipo命令

把target加上arm64編譯,靜態庫(.a)或者framework,就需要重新找支持64-bit的包.

7.支持64-bit后程序包會變大么?

會。

Checklist

最后列一下官方文檔中的注意點:

  • 不要將指針強轉成整數
  • 程序各處使用統一的數據類型
  • 對不同類型的整數做運算時一定要注意
  • 需要定長變量時,使用如int32_t, int64_t這種定長類型
  • 使用malloc時,不要寫死size
  • 使用能同時適配兩個架構的格式化字符串
  • 注意函數和函數指針(類型轉換和可變參數)
  • 不要直接訪問Objective-C的指針(isa)
  • 使用內建的同步原語(PRimitives)
  • 不要硬編碼虛存頁大小
  • Go Position Independent

參考文章:

http://ios.jobbole.com/81561/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 公安县| 新竹县| 胶南市| 灌云县| 永修县| 桃源县| 阳西县| 从化市| 城口县| 桂东县| 乌拉特中旗| 乌拉特前旗| 汉阴县| 莱阳市| 新野县| 中卫市| 融水| 丹东市| 德兴市| 江安县| 恭城| 女性| 出国| 廉江市| 潮州市| 肇州县| 潞城市| 浦东新区| 榆树市| 科技| 普定县| 抚州市| 孙吴县| 洛阳市| 西吉县| 仁布县| 丹凤县| 蒙山县| 桂林市| 阿拉善左旗| 云安县|