欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS開(kāi)發(fā)技巧之WeakSelf宏的進(jìn)化詳解

 更新時(shí)間:2018年05月15日 08:41:51   作者:月若無(wú)涯  
在程序中我們經(jīng)常用到Block,但寫(xiě)weak self 時(shí)會(huì)比較繁瑣,下面這篇文章主要給大家介紹了關(guān)于iOS開(kāi)發(fā)技巧之WeakSelf宏的進(jìn)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們一起來(lái)看看吧

前言

本文主要給大家介紹了關(guān)于iOS之WeakSelf宏的進(jìn)化的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

WeakSelf宏的進(jìn)化

我們都知道在防止如block的循環(huán)引用時(shí),會(huì)使用__weak關(guān)鍵字做如下定義:

__weak typeof(self) weakSelf = self;

后來(lái),為了方便,不用每次都要寫(xiě)這樣一句固定代碼,我們定義了宏:

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

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

WeakSelf;
...
[weakSelf doSomething];

再后來(lái),我們發(fā)現(xiàn)不止self需要使用weak,可能有部分變量也需要weak,于是我們的宏繼續(xù)進(jìn)化,不僅僅只支持self:

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

這樣,后續(xù)對(duì)需要使用weak的對(duì)象,只要寫(xiě)一句WeakObj(obj) 即可使用objWeak變量了(PS:發(fā)現(xiàn)沒(méi)有,這里生成的變量名其實(shí)是objWeak,并不是weakObj,原因見(jiàn)文章末的注1)

再后來(lái),我們發(fā)現(xiàn)了一些小技巧,可以讓我們的這個(gè)宏看起來(lái)更原生一些,我們添加了@符號(hào)在前面:

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

使用上看起來(lái)是這樣

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

是不是感覺(jué)挺高大上的?

這里是利用了@autoreleasepool{}這個(gè)系統(tǒng)的關(guān)鍵字來(lái)實(shí)現(xiàn)的,其實(shí)還可以利用@try{}@finally{}這個(gè)也可以達(dá)到相同的效果,比如:

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

這部分空的@try或者空的@autoreleasepool會(huì)在編譯時(shí)被優(yōu)化掉,不必?fù)?dān)心性能問(wèn)題。

至此,我們的宏已經(jīng)可以用了,但是實(shí)際使用中,出現(xiàn)了一個(gè)很尷尬的問(wèn)題,就是代碼自動(dòng)補(bǔ)全,@W并不能自動(dòng)提示出該宏,所以每次都是很尷尬的先利用提示,寫(xiě)完WeakObj(obj) ,然后光標(biāo)移動(dòng)到前面去打上一個(gè)@符號(hào)。

這種事情怎么能忍受?

還好我們還有利器,Xcode的CodeSnippet,任意方法內(nèi),寫(xiě)一句代碼

@WeakObj(<#obj#>);

拖到Xcode的CodeSnippet區(qū)域,快捷鍵設(shè)置為@WeakObj即可。

至此,愉快的使用@W即可自動(dòng)補(bǔ)全出該宏了。。

另外,還有相應(yīng)的strong宏,一并曬在這里

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

用處嘛簡(jiǎn)單寫(xiě)個(gè)例子:

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

關(guān)于這么寫(xiě)的原因,請(qǐng)先自行揣摩,之后可以看看曉月的這篇文章:http://www.dbjr.com.cn/article/140126.htm,也可以在評(píng)論中留言。

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

1. 使用時(shí),如果開(kāi)發(fā)者習(xí)慣性的要打出 [self doSomething]時(shí),當(dāng)他輸入self時(shí),自動(dòng)補(bǔ)全出來(lái)的部分能看到還有selfWeak可供選擇,算是一種提醒方式。

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

好了,這篇文章希望對(duì)一些人有些啟發(fā)或幫助。

最后曬出個(gè)人在用的宏定義:

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • IOS中手風(fēng)琴表不能移動(dòng)的解決方法

    IOS中手風(fēng)琴表不能移動(dòng)的解決方法

    本文給大家分享的是IOS開(kāi)發(fā)中遇到的一個(gè)手風(fēng)琴特效無(wú)法正常工作的問(wèn)題的解決方法,經(jīng)過(guò)度娘了很久才找到解決方法,這里推薦給大家,有需要的小伙伴可以參考下。
    2015-05-05
  • iOS中UITextField實(shí)現(xiàn)過(guò)濾選中狀態(tài)拼音的代碼

    iOS中UITextField實(shí)現(xiàn)過(guò)濾選中狀態(tài)拼音的代碼

    這篇文章主要介紹了iOS中UITextField實(shí)現(xiàn)過(guò)濾選中狀態(tài)拼音的代碼,需要的朋友可以參考下
    2018-01-01
  • IOS實(shí)現(xiàn)簡(jiǎn)單的進(jìn)度條功能

    IOS實(shí)現(xiàn)簡(jiǎn)單的進(jìn)度條功能

    這篇文章主要介紹了IOS實(shí)現(xiàn)簡(jiǎn)單的進(jìn)度條功能的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • iOS中關(guān)于Cookie驗(yàn)證登錄狀態(tài)

    iOS中關(guān)于Cookie驗(yàn)證登錄狀態(tài)

    這篇文章主要介紹了iOS中關(guān)于Cookie驗(yàn)證登錄狀態(tài)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • iOS開(kāi)發(fā)中音頻視頻播放的簡(jiǎn)單實(shí)現(xiàn)方法

    iOS開(kāi)發(fā)中音頻視頻播放的簡(jiǎn)單實(shí)現(xiàn)方法

    視頻音頻是我們?cè)趇os日常開(kāi)發(fā)中經(jīng)常會(huì)遇到的一個(gè)需求,所以下面這篇文章主要給大家介紹了關(guān)于iOS開(kāi)發(fā)中音頻視頻播放的簡(jiǎn)單實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • iOS在固定的label上動(dòng)態(tài)顯示所有文字

    iOS在固定的label上動(dòng)態(tài)顯示所有文字

    這篇文章給大家主要介紹了iOS中如何實(shí)現(xiàn),在固定的label上動(dòng)態(tài)顯示所有文字的方法,文中給出了示例和思路,對(duì)大家的理解很有幫助,感興趣的朋友們下面來(lái)一起看看吧。
    2016-10-10
  • yii框架分類樹(shù)擴(kuò)展示例

    yii框架分類樹(shù)擴(kuò)展示例

    這篇文章主要介紹了yii框架分類樹(shù)擴(kuò)展示例,提供兩種方式的分類樹(shù)格式,表格和下拉框形式的樹(shù)形結(jié)構(gòu),需要的朋友可以參考下
    2014-04-04
  • 最新評(píng)論