美文网首页
iOS——Block中 __block、__weak 、type

iOS——Block中 __block、__weak 、type

作者: 阿超8888 | 来源:发表于2020-05-11 12:23 被阅读0次

一、typeof概述
iOS——Block中 __block、__weak 、typeof、define等词的小解释
(1)typeof这个东西并不是ISO/IEC 9899:1999里的,也就是说不是标准C的运算符,这是gcc的一个扩展。可以看成一个一元运算符。

(2)typeof是一个什么东西,怎么用?

typeof和sizeof用法非常类似!

sizeof(exp.)返回的是exp.的数据类型大小;

typeof(exp.)返回的就是exp.的数据类型。exp.可以是任意类型,所以返回的也是和exp.对应的任意类型。

通俗的说就是:可以根据typeof()括号里面的变量,自动识别变量类型并返回该类型。

二、typeof的使用

在iOS中的使用,常见运用于Block 。

下面看一个典型的用法:

__block typeof(self) bself = self;

[self methodBlock:^ {

[bself doSomething];

}

代码解释:定义一个和self相同数据类型的bself ,并赋值为self,在block中使用

三、Block中其他字的使用解释

在block中,我们是用

__block

__weak

避免循环引用.

block对于其变量都会形成强引用(retain),对于self也会形成强引用(retain) ,而如果self本身对block也是强引用的话,就会形成 强引用 循环,无法释放——造成内存泄露。,所以我们会使用

  __blocktypeof(self)bself=self;//

 MRC__weaktypeof(self)weakself=self;//ARC

四、延伸

为了方便,不用每次都要写这样一句固定代码,我们将这句代码定义了宏:

#define WeakSelf __weaktypeof(self)weakSelf=self;//WeakSelf 宏名,weakSelf 变量名

作者:00after

链接:https://www.jianshu.com/p/8fd18c21de82

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

#defineWeakObject(obj) __weak typeof(obj) weakObject = obj;#defineStrongObject(obj) __strong typeof(obj) strongObject = weakObject;WeakObject(self);loginVC.loginFinished=^(){[weakObject doSomeThing];//使用多次的话,就需要strongSelf};WeakObject(self);loginVC.loginFinished=^(){StrongObject(self)[strongObject doSomeThing];[strongObject doSomeThingElse];};

相关文章

网友评论

      本文标题:iOS——Block中 __block、__weak 、type

      本文链接:https://www.haomeiwen.com/subject/cxqunhtx.html