麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > iOS > 正文

iOS開發技巧之WeakSelf宏的進化詳解

2019-10-21 18:41:07
字體:
來源:轉載
供稿:網友

前言

本文主要給大家介紹了關于iOS之WeakSelf宏的進化的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

WeakSelf宏的進化

我們都知道在防止如block的循環引用時,會使用__weak關鍵字做如下定義:

__weak typeof(self) weakSelf = self;

后來,為了方便,不用每次都要寫這樣一句固定代碼,我們定義了宏:

#define WeakSelf __weak typeof(self) weakSelf = self;

之后,我們可以比較方便的在需要的地方:

WeakSelf;...[weakSelf doSomething];

再后來,我們發現不止self需要使用weak,可能有部分變量也需要weak,于是我們的宏繼續進化,不僅僅只支持self:

#define WeakObj(o) __weak typeof(o) o##Weak = o;

這樣,后續對需要使用weak的對象,只要寫一句WeakObj(obj) 即可使用objWeak變量了(PS:發現沒有,這里生成的變量名其實是objWeak,并不是weakObj,原因見文章末的注1)

再后來,我們發現了一些小技巧,可以讓我們的這個宏看起來更原生一些,我們添加了@符號在前面:

#define WeakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o;

使用上看起來是這樣

@WeakObj(self);...[selfWeak doSomething];

是不是感覺挺高大上的?

這里是利用了@autoreleasepool{}這個系統的關鍵字來實現的,其實還可以利用@try{}@finally{}這個也可以達到相同的效果,比如:

#define WeakObj(o) try{}@finally{} __weak typeof(o) o##Weak = o;

這部分空的@try或者空的@autoreleasepool會在編譯時被優化掉,不必擔心性能問題。

至此,我們的宏已經可以用了,但是實際使用中,出現了一個很尷尬的問題,就是代碼自動補全,@W并不能自動提示出該宏,所以每次都是很尷尬的先利用提示,寫完WeakObj(obj) ,然后光標移動到前面去打上一個@符號。

這種事情怎么能忍受?

還好我們還有利器,Xcode的CodeSnippet,任意方法內,寫一句代碼

@WeakObj(<#obj#>);

拖到Xcode的CodeSnippet區域,快捷鍵設置為@WeakObj即可。

ios,weakself,宏定義,宏

至此,愉快的使用@W即可自動補全出該宏了。。

另外,還有相應的strong宏,一并曬在這里

#define StrongObj(o) autoreleasepool{} __strong typeof(o) o = o##Weak;

用處嘛簡單寫個例子:

@WeakObj(self);[var setBlock:^{ @StrongObj(self); [self doSomething];}];

關于這么寫的原因,請先自行揣摩,之后可以看看曉月的這篇文章也可以在評論中留言。

最后,揭曉為什么該宏生成的變量名是objWeak:

1. 使用時,如果開發者習慣性的要打出 [self doSomething]時,當他輸入self時,自動補全出來的部分能看到還有selfWeak可供選擇,算是一種提醒方式。

2. 如果weak前置,當然也可以,生成的會是weakobj這樣的變量名,只需要把宏中o##Weak 換成weak##o

好了,這篇文章希望對一些人有些啟發或幫助。

最后曬出個人在用的ios/203625.html">宏定義:

#define YRWeakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o;#define YRStrongObj(o) autoreleasepool{} __strong typeof(o) o = o##Weak;

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品一区二区在线 | 欧美一级毛片欧美一级成人毛片 | 麻豆传传媒久久久爱 | 中文字幕在线播放视频 | 国产流白浆高潮在线观看 | www.17c亚洲蜜桃 | 久草在线免费看 | 欧美精品一区二区视频 | 九九热播视频 | 一级视频片 | 国产精品亚洲一区二区三区久久 | 国产亚洲精品成人 | 久久精品欧美电影 | 一级黄色av电影 | 草莓福利视频在线观看 | 免费在线观看亚洲 | 桥本有菜免费av一区二区三区 | 午夜丰满少妇高清毛片1000部 | 久久精品之 | 蜜桃91丨九色丨蝌蚪91桃色 | 久久久久久69| 九九午夜视频 | 91久久九色 | 欧美成人三级大全 | 天天透天天狠天天爱综合97 | 日韩视频―中文字幕 | 欧美电影在线观看 | 免费在线观看成人网 | 欧美日韩在线视频一区 | 国产精品视频导航 | 黄色网址电影 | 玩偶姐姐在线观看免费 | av日韩一区二区三区 | 欧美日韩成人一区二区 | av在线播放免费观看 | 一级美女大片 | 国产一区二区成人在线 | 久草在线资源观看 | 欧美一级爱操视频 | av一道本| 日本成人一区二区 |