iOStypeof()的进⼀步理解
平时⽤iOS都经常⽤到typeof(变量)的⽤法,各位⽼铁不知道只会⽤还是理解了这个关键字⽤法的来源,如果对C、C++有过经验,可能会知道这是C⾥⾯的关键字。(题外话,iOS中OC语⾔因为是对C的超集,所以很多C、C++的⽤法,的确做到⼀定程度是个坎⼉)。好,继续下⾯的介绍。
__weak typeof(self) weakSelf = self;
typeo f
typeof 是⼀个⼀元运算,放在⼀个运算数之前,运算数可以是任意类型。
它返回值是⼀个字符串,该字符串说明运算数的类型。
个⼈理解为:可以根据typeof()括号⾥⾯的变量,⾃动识别变量类型并返回该类型。
下⾯为代码测试:
NSString *str;
__strong typeof(str) a = @"2";
BOOL isClass = [a isKindOfClass:[NSString class]];
if (isClass == YES) {
NSLog(@"yes");
}
可见的确返回了正确的格式!
运⽤场景
常见运⽤于Block
常见运⽤于Block
⾸先在下⾯的block代码中需要⽤到self,但是我们都知道block会对⾥⾯的代码变量进⾏strong referen
ce,导致内存泄漏。
所以在block内如果有self的话,⼀般都会在block外⾯加⼀句_block typeof(self)bself = self;
__block typeof(self) bself = self;
[self methodBlock:^ {
[bself doSomething];
}
typeof的用法拓展typeof & typedef
typeof & typedef 咋⼀看上去⽼像了,但是两者区别可是很⼤的
⼀、理解
typeof 是⼀个⼀元运算,放在⼀个运算数之前,运算数可以是任意类型。 可以理解为:我们根据typeof()括号⾥⾯的变量,⾃动识别变量类型并返回该类型。
typedef:定义⼀种类型的别名,⽽不只是简单的宏替换。
⼆、iOS 中的⽤处
2-1、typeof 常见运⽤于Block中,避免循环引⽤发⽣的问题。
__weak__typeof(self) weakSelf =self;
[weakSelfaddFooterWithRefreshingBlock:^{ //do something[weakSelf.footerendRefreshing];}
注意: typeof 括号中的值和等于后⾯的值是相同的类型。 另外有时偷懒也可以⽤到的,但是我不⽤,哈哈
__tView) ws =tView;
然后后⾯就直接⽤ws这样写啦…
ps: typeof、 __typeof__ 、__typeof 的区别
ps:
其实它们是没有区别的,只是它们只是针对不同的 c语⾔编译版本 有所不同的。 typeof是现代GNU C++的关键字; 从Objective-C的根源说,它其实来⾃于C语⾔,所以很多地⽅使⽤了继承⾃C的关键字。 看到AFNetworking 中,⽤的都是__typeof();
2-2、typedef 常⽤于命名(枚举和Block)
typedefNS_ENUM(NSInteger,UITableViewStyle) {UITableViewStylePlain,// regular table viewUITableViewStyleGrouped// preferences style table view}
typedefvoid(^YTKRequestCompletionBlock)(__kindof YTKBaseRequest *request);
iOS这块我们主要是⽤于枚举和Block,其他详细⽤途可参考:typedef ⽤法总结。
总之,⼤概如上吧,零散的知识需要理解并记忆,
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论