NSInvocation 调用block cpp 转换 fatal error: 'UIKit/UIKit.h' file not found https://blog.csdn.net/yst19910702/article/details/82970729…
1.自定义一个继承于UIButton的按钮 2.声明block: 返回值类型   函数名  参数列表 typedef void (^ButtonBlock)(UIButton *); @interface MyButton : UIButton @property(nonatomic,copy)ButtonBlock block; - (void)addTapBlock:(ButtonBlock)block; @end 3.重写button的点击事件的方法 - (void)addTapBlock…
本文章将从两个方向分别介绍 OC 与 swift 混编 1. 第一个方向从 swift工程 中引入 oc类 1. 1 如何在swift的类中使用oc类    1.2  如何在swift中实现oc的代理方法    1.3   如何在swift中实现oc的Block回调 2 二个方向从OC工程中引入swift类 2.1  如何在OC类中使用swift类    2.2   如何在OC中实现swift的代理方法    2.3   如何在OC中实现swift中类似Block回调 下面是具体的实现过程: 1…
第一:swift->oc 这个相对简单一点, 在自动生成的桥接文件中导入你要掉的oc文件名就可以了, 如果没有生成桥接文件也可以自己手动创建(Header File) 第二:oc->swift Bulid Settings-->packaging-->Defines Module (设为YES) Bulid Settings-->packaging-->Product Name (这个字段 + Swift.h 导入到oc的头文件) 代码:oc->swift(oc中…
先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的局部变量,mutArray指针 保存到栈上,那么当执行完captureObject方法后,出去了作用域mutArray变量就会被系统自动释放. 所以当执行captureBlk([[NSObject alloc] init]); 的时候,mutArray为nil,每次打印的为0. 当然上面说的是错的.…
研究工具 clang 为了研究编译器的实现原理,我们需要使用 clang 命令.clang 命令可以将 Objetive-C 的源码改写成 C / C++ 语言的,借此可以研究 block 中各个特性的源码实现方式. clang -rewrite-objc main.m main.m中不能包含UIKit框架,命令行中解析无法识别.包含#import <Foundation/Foundation.h>是可以支持的 C语言中变量有哪几种 自动变量 函数参数 静态变量 静态全局变量 全局变量 每种变…
11.那么Block到底是怎么实现的呢?试一试通过将Block 的代码转换成普通C语言代码来查看它的实现过程. 要将OC代码转换成C语言代码,可以使用clang编译的一个命令: 通过这个命令能把指定文件中的OC代码改写成C++代码(其中主要部分还是普通的C语言代码),通过这些代码就能看到Block是如何使用C++语言实现的. 12.首先编写一个最简单的Block,没有返回值和参数列表,执行它会输出“Shayne Yeorg”.代码如下: 然后使用11的命令转换这个文件,可以得到文件main.cp…
主要讲述的要点: block 干什么用的 block 语法 block 底层实现 block 变量捕捉 block 的种类.在存储空间中的存储位置 block 循环引用 __block 在ARC 中 与 在MRC 中的是否造成循环引用问题 栈block生命周期 1.首先我们来说说block干什么用的? block英语中是"块"的意思, 对就是保存一块代码用的, 只不过Block是C语言中的一种扩充数据类型, 把一块代码保存到一个Block中, 当你用到的时候利用调用函数的方式, 函数名…
1.block的基本概念及使用 blcok是一种特殊的数据结构,它可以保存一段代码,等到需要的时候进行调用执行这段代码,常用于GCD.动画.排序及各类回调. Block变量的声明格式为: 返回值类型(^Block名字)(参数列表); //声明一个没有传参和返回值的blcok void(^myBlock1)(void) ; //声明一个有两个传参没有返回值的blcok 形参变量名称可以省略,只留有变量类型即可 void(^myBlock2)(NSString *name,int age); //声…
学习内容 iOS的内存管理和引用计数规则 内存管理的思考方式 自己生成的对象自己持有 非自己生成的对象自己也能持有 自己持有的对象不需要时释放 非自己持有的对象不能释放 ARC有效时,id类型和对象类型必须加上所有权修饰符,一共有四种 __strong id和对象类型如果不加所有权修饰符那么默认为__strong类型 id obj = [[NSObject alloc]init] id __strong obj = [[NSObject alloc]init] //以上两种在ARC有效情况下是相…