Block
文章平均质量分 96
Ansel_m
阿里天猫
展开
-
Block底层详解
block详解1.前言2.block的类型2.1.总共三种类型,具体如下:2.2 __ NSGlobalBlock__2、block数据结构3、block的变量捕获(capture)2.1auto变量的捕获2.2对象类型的auto变量4、block的Copy5、__weak问题解决6、__block修饰符6.1使用6.2内存管理6.3__forwarding指针7、循环引用1.前言本文旨在对block底层进行详细的探究,源码参考libclosure-79。2.block的类型2.1.总共三种类型,原创 2022-03-08 22:36:04 · 2822 阅读 · 0 评论 -
block的变量捕获
先了解一下block的本质1.block本质上也是一个OC对象,它内部也有个isa指针2.block是封装了函数调用以及函数调用环境的OC对象3.block的底层结构如下图所示为了保证block内部能够正常访问外部的变量,block有个变量捕获机制 变量类型 捕获到block内部 访问方式 局部变...原创 2019-03-31 13:25:35 · 205 阅读 · 0 评论 -
iOS Block 详解
一、概述闭包 = 一个函数「或指向函数的指针」+ 该函数执行的外部的上下文变量「也就是自由变量」;Block 是 Objective-C 对于闭包的实现。其中,Block:可以嵌套定义,定义 Block 方法和定义函数方法相似Block 可以定义在方法内部或外部只有调用 Block 时候,才会执行其{}体内的代码本质是对象,使代码高聚合 使用 clang 将 OC 代码转换为 C++ 文件查看 b...转载 2018-06-20 08:55:15 · 259 阅读 · 0 评论 -
证明Block是对象
int age = 10; void (^test)(void) = ^ { NSLog(@"xxxx, %d", age); }; id t = (id)(test); NSLog(@"%@, %@, %@", object_getClass(t), object_getClass(object_getCla...原创 2018-06-30 13:32:10 · 266 阅读 · 0 评论 -
EXC_BAD_ACCESS异常 _block_invoke 问题
我们在调用block时,如果这个block为nil,则程序会崩溃,报类似于EXC_BAD_ACCESS(code=1, address=0xc)异常【32位下的结果,如果是64位,则address=0x10】。如图1,这个异常表示程序在试图读取内存地址0xc的信息时出错。在定义一个block时,编译器会在栈上创建一个结构体,类似于图2的结构体。 block就是指向这个结转载 2018-01-12 16:48:56 · 3647 阅读 · 0 评论 -
OC转成C/C++
由于想了解OC通过runtime机制转成的C++代码是什么样子的,在进入项目目录中,执行cc -rewrite-objc ViewController.m时如下错:In file included from ViewController.m:9:**./ViewController.h:9:9: ****fatal error: ****'UIKit/UIKit.h' file not fo转载 2016-10-17 21:24:19 · 2894 阅读 · 0 评论 -
CocoaPods的使用
1. 使用CocoaPods的好处2. CocoaPods的使用3. CocoaPods的更新4. 注意事项/常见问题5. 参考文献前言:CocoaPods固然有诸多的好处,但工具毕竟只是一个工具,再好用的工具都需要使用的人能够灵活的运用它。比如,当你需要深度定制某第三方库,该做的事情一点也不能少,这类库就不要用CocoaPods来管理了。1. 使用Co转载 2014-08-20 10:56:30 · 1285 阅读 · 0 评论 -
xcode 插件
古人云“工欲善其事必先利其器”,打造一个强大的开发环境,是立即提升自身战斗力的绝佳途径!以下是搜集的一些有力的XCode插件。 1.全能搜索家CodePilot 2.0你要找的是文件?是文件夹?是代码?Never Mind,CMD+SHIFT+X调出CodePilot,输入任何你想到搜的东西吧!想搜appFinishLaunchingWithOptions?忘记咋拼了?没关系强大的代码转载 2014-08-20 18:02:03 · 1199 阅读 · 0 评论 -
Block面试题解析
Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C语言的扩展,用来实现匿名函数的特性。他在是一个仿对象,也可以说是一种特殊的对象,他有三种类型:1.NSGlobalBlock:类似函数,位于text段2.NSStackBlock:位于栈内存,函数返回后Block将无效;3.NSMallocBlock:位于堆内存。第一种类型:说转载 2014-08-20 10:46:09 · 3284 阅读 · 1 评论 -
忽略performSelector警告
忽略performSelector警告#pragma clang diagnostic push#pragma clang diagnostic ignored "-Warc-performSelector-leaks" [viewController performSelector:finishMethod withObject:request];#pra转载 2014-08-20 10:08:25 · 5868 阅读 · 0 评论 -
IOS中的block和retain cycle (经典)
retain cycle 的产生说到retain cycle,首先要提一下Objective-C的内存管理机制。作为C语言的超集,Objective-C延续了C语言中手动管理内存的方式,但是区别于C++的极其非人道的内存管理,Objective-C提出了一些机制来减少内存管理的难度。 比如:内存计数。在Objective-C中,凡是继承自NSObject的类都提供了两种方法转载 2014-08-20 10:01:21 · 601 阅读 · 0 评论 -
正确使用Block避免Cycle Retain和Crash
Block简介Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事。需要注意的是由于Objective-C在iOS中不支持GC机制,使用Block必须自己管理内存,而内存管理正是使用Block坑最多的地方,错误的内存管理 要么导致return cycle内存泄漏要么内存被提前释放导致crash。 Block的使用很像函数指针,不过与函数最大的不同是:转载 2014-08-20 10:35:36 · 3686 阅读 · 0 评论 -
NSObject详解
NSObject Class ReferenceInitializing a Class[plain] view plaincopy1.+ (void)initialize 一个类的实例在使用前需要先初始化.initialize 在一个类中只被调用一次。如果你想为一个类或类的Categories执行独立的初始化,你可以实转载 2014-08-20 15:50:07 · 5636 阅读 · 0 评论