日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios下划线变量:为什么变量前要加下划线才有用?

發布時間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios下划线变量:为什么变量前要加下划线才有用? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先看一段代碼。?

復制代碼
  • appdelegate.h
  • @property (weak) IBOutlet NSMatrix *StockType;
  • @property (weak) IBOutlet NSMatrix *market;
  • appdelegate.m
  • NSCell *st=[market selectedCell];
  • ?
    ?
    編譯時,總是提示,找不到market變量,但是StockType卻沒問題。?
    如果根據系統建議,在market前加上下劃線,變成_market卻可以正常編譯和執行。?
    ?
    但是到底是為什么呢??
    ?
    經過對比我發現,在m文件中還有這么一段。?
    ?

    復制代碼
  • appdelegate.m
  • @synthesize StockType;
  • ?
    ?
    差異就在這里,只有在synthesize后面加上market,就不用再用下劃線了。?
    雖然原因還是不清楚,但是至少問題解決了。?

    ?

    A:

    Xcode的編譯期自動補全造成的?
    ?
    在.m實現文件中,如果使用property,必須使用 self.property 的方式調用 getter 方法,而如果想要直接實例變量,必須在 m??文件中通過 synthesize 關鍵字同步過來?
    ?
    所以在早期的 xcode 中(我記得應該是4之前),在.m文件中,必須手寫 @synthesize 屬性名 = 實例變量名 的方式,將所有屬性同步?
    而按照oc 的官方命名約定,為了避免變量泄漏,實例變量名一般都建議使用下劃線前綴表示法,也就是如果property名稱叫 abc,對應的實例變量名就定義為 _abc?
    因此在.m代碼中所有的property都需要手動按照 @synthesize property = _property 的方式與實例變量同步?
    ?
    這樣的寫法是如此普遍,以至于xcode4 之后,編輯器添加了自動同步補全功能,只需要在 h 文件中定義 property,在編譯期m文件會自動補全出 @synthesize property = _property 的代碼,不再需要手寫,避免了“體力代碼”的手動編碼?
    ?
    但是這樣要求實例變量名一定等于 "_"+屬性名又不太靈活, 如果開發人員需要指定不同的屬性名,就需要在 .m 文件中手動編寫 @synthesize 了?
    ?
    你的例子中,?
    ?
    如果m中什么都不寫?
    xcode會默認在編譯期為 market 屬性,補全成 @synthesize market = _market,實例變量名為 _market?
    ?
    如果m中指定了 @synthesize market?
    xcode會認為你手動指定了實例變量名為 market ,編譯期補全成:@synthesize market = market,實例變量名為 market?
    ?
    ?
    很容易驗證,你在m中定義為 @synthesize market = _xyz,你在.m文件中使用的實例變量名就是 _xyz 了?

    轉載于:https://www.cnblogs.com/kenshinobiy/p/4820874.html

    總結

    以上是生活随笔為你收集整理的ios下划线变量:为什么变量前要加下划线才有用?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。