服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS Block解开多年以来一直的误解

iOS Block解开多年以来一直的误解

2021-04-26 18:54CoderHG IOS

这篇文章主要给大家介绍了关于iOS Block多年以来一直的误解如何解开的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

首先来了解下什么是block

       (1)block是oc中的一种数据类型,在ios开发中被广泛使用

       (2)^是block的特有标记

       (3)block的实现代码包含在{}之间

       (4)大多情况下,以内联inline函数的方式被定义和使用

       (5)block与c语言的函数指针有些相似,但使用起来更加灵活

iOS Block解开多年以来一直的误解

这张图是我在2015年的时候发现的新大陆,那时候也知道block是一种特殊的数据类型、也是一种特殊的对象(不同于nsobject)。在执行的时候务必要先if判断一下,否者crach。我给一个block变量赋值nil,尽然也crach了。看下面的值,是null而不是nil。

一、特殊的对象类型

下面代码的正确性, 说明block也是一种对象类型:

?
1
2
3
4
5
6
7
8
9
10
{
 // 数组中有一个block成员
 nsarray* arr = @[^(nsstring* name){
  nslog(@"哈哈哈哈");
  return name;
 }];
 // 是不是就能说明, block本来也是一种特殊的对象
 nsstring* (^b)() = arr.firstobject;
 nslog(@"%@", b(@"coderhg"));
}

以上代码的合法性,足以证明 block 是一种特殊的对象类型。那么以后面试的时候,就可以装一下逼,大胆的说在 oc 中有三种不同的对象类型,分别是:nsobject、nsproxy 与 block。

二、判空的重要性

在上面也提到在执行block之前要判空处理,这是有原因的。

iOS Block解开多年以来一直的误解

尽然一个nil对象的block属性执行的时候也crach了。这可颠覆了我一直以来对block的理解。

但是、不管怎么的crach,只要是在执行之前if一下总是没有错的。那具体为什么会crash呢?请看下图解释:

iOS Block解开多年以来一直的误解

上图中不仅介绍了为什么会闪退,同时还介绍了为什么闪退时的address=0x10。面试必备、面试必备、面试必备。

三、我的面试经过 (17年12月)

在美团面试第二轮的时候,被问到了,第二轮大概1个小时吧,面试官正想要结束面试的时候,最后来了这么一个问题,大概的经过是这样的:

1、如果调用一个赋值为空的 block,会发生什么情况?

看到这个问题,把我乐坏了。我所回答到的点有:直接 crash、block 是一个特殊的对象、赋值为 null 与 nil 都会闪退。
我忘记了一个成语叫乐极生悲,因为接下来的一个问题。

2、闪退的那个地址值(address)是多少?

一脸的蒙圈,怎么会问这个问题?。。。只能靠猜了,因为平时根本不会关注这个。应该是0x0,直接告诉的面试官是猜的。没想到他直接告诉我不是这个值,然后他再次抛出另一个问题。

3、这个值是0x10,你知道是为什么么?

我连第2问都不知道,第3问肯定是不知道的了。。。。。

后来的后来,才总结出上面的那张图片的内容。

谢谢~

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

原文链接:https://www.jianshu.com/p/7aa751f62b5b

延伸 · 阅读

精彩推荐
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28