iOS block/runtime/runloop
番薯大佬
码农一枚
展开
-
iOS 代码块(block)的使用
代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码)。下图是如何把块变量赋值给一个变量的语法讲解:按照调用函数的方式调用块对象变量就可以了:int result =转载 2014-07-03 00:20:27 · 615 阅读 · 0 评论 -
runtime方法替换
通过方法转换,将array添加元素的方法进行转换,避免添加nil对象时出现crash情况。#import <Foundation/Foundation.h>@interface NSMutableArray (RunTime)@end#import "NSMutableArray+RunTime.h"#import <objc/runtime.h>...原创 2018-07-07 07:54:00 · 763 阅读 · 0 评论 -
第四章 Runtime应用:实现字典和模型的自动转换
用runtime提供的函数遍历Model自身所有属性,如果属性在json中有对应的值,则将其赋值。示例#import <Foundation/Foundation.h>@interface Person : NSObject- (instancetype)initWithDict:(NSDictionary *)dict;@property (nonatomic, ...原创 2018-07-07 00:47:03 · 734 阅读 · 0 评论 -
第四章 Runtime应用:实现NSCoding的自动归档和自动解档
用runtime提供的函数遍历Model自身所有属性,并对属性进行encode和decode操作。 通常系统自带的数据类型,如:字典NSDictionary,数组NSArray,字符串NSString,布尔数据BOOL,数字对象NSNumber,NSData,NSDate等可以直接进行存储操作;但是自定义的数据类型,如果直接进行存储操作时,则会抛出异常,这时候就需要进行归档、解档处理。示例代...原创 2018-07-07 00:33:12 · 885 阅读 · 1 评论 -
第四章 Runtime应用:方法转换
swizzling应该只在+load中完成。 在 Objective-C 的运行时中,每个类有两个方法都会自动调用。 1、+load 是在一个类被初始装载时调用; 2、+initialize 是在应用第一次调用该类的类方法或实例方法前调用的。 两个方法都是可选的,并且只有在方法被实现的情况下才会被调用。swizzling应该只在dispatch_once中完成,由于swizzling改...原创 2018-07-06 23:52:55 · 262 阅读 · 0 评论 -
第四章 Runtime应用:方法添加
方法添加class_addMethod(Class _Nullable cls, SEL _Nonnull name, IMP _Nonnull imp, const char * _Nullable types) 1、cls 被添加方法的类 2、name 添加的方法的名称的SEL 3、imp 方法的实现。该函数必须至少要有两个参数,self,_cmd 4、...原创 2018-07-06 23:46:31 · 273 阅读 · 0 评论 -
第四章 Runtime应用:关联对象(添加属性)
关联对象(Objective-C Associated Objects)给分类增加属性。关联对象void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)获取关联的对象id objc_getAssociatedObject(id obje...原创 2018-07-06 23:41:19 · 391 阅读 · 0 评论 -
第三篇 Runtime消息转发
发送消息时会在对应的类对象中搜索方法列表,如果找不到则会沿着继承树向上一直搜索知道继承树根部(通常为NSObject),如果还是找不到并且消息转发都失败了就回执行doesNotRecognizeSelector:方法报unrecognized selector错。消息转发到底是什么呢?接下来将会逐一介绍最后的三次机会。 1、动态方法解析 2、备用接收者 3、完整消息转发动态方法解析 ...原创 2018-07-06 23:31:57 · 1145 阅读 · 0 评论 -
第二篇 Runtime消息传递
一个对象的方法像这样[obj doing],编译器转成消息发送objc_msgSend(obj, doing),Runtime时执行的流程是这样的: (1)通过obj的isa指针找到它的class; (2)在class的method list找doing(直接在cache里找到,避免去遍历objc_method_list); (3)如果class中没到doing,继续往它的superc...原创 2018-07-06 22:30:26 · 146 阅读 · 0 评论 -
第一篇 Runtime介绍
Objective-C Runtime Objective-C Runtime Programming Guide Objective-C 是一个动态语言,这意味着它不仅需要一个编译器,也需要一个运行时系统来动态得创建类和对象、进行消息传递和转发。高级编程语言想要成为可执行文件需要先编译为汇编语言再汇编为机器语言,机器语言也是计算机能够识别的唯一语言。使用OC进行面向对象开发,而C...原创 2018-07-06 22:20:55 · 191 阅读 · 0 评论 -
iOS runtime——函数/使用方法/使用场景/示例
关于iOS runtime学习之路,主要介绍了大部分runtime函数,并一一做了注释,使用方法,场景等也举了例子,便于理解转载原址:http://www.jianshu.com/p/58c985408b75#一.认识一下runtime类runtime二.The Runtime1.Objective-C:是一门简单的语言,95%是C。只是在语转载 2016-04-09 18:38:13 · 2242 阅读 · 0 评论 -
Objective-C Runtime 运行时之五:协议与分类
Objective-C Runtime 运行时之五:协议与分类转载原址:http://blog.jobbole.com/79583/原文出处: 南峰子的技术博客 Objective-C中的分类允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到。Objective-C中的协议是普遍存转载 2016-04-09 17:35:27 · 426 阅读 · 0 评论 -
深入理解 Objective-C 的方法调用流程
转载原址:http://www.jianshu.com/p/114782a909f9我们知道,Objective-C 的方法调用不同于其他编程语言。在 Objective-C 中,所有的[receiver message] 都会转换为 objc_msgSend(receiver, @selector(message));而 objc_msgSend 的调用又涉及到方法查找、消息动态转载 2016-04-09 18:52:43 · 1358 阅读 · 0 评论 -
类别添加属性,即runtime运行时添加属性(动态属性)
在自定义扩展类时,可以通过运行时添加属性。关键点在于,首先必须导入运行时头文件,即“#import ”;其次,设置属性,即“objc_setAssociatedObject(self, &keyLineBottom, lineBottom, OBJC_ASSOCIATION_RETAIN);”;还有是获得设置的属性,如“UIImageView *lineBottom = objc_ge原创 2016-01-08 17:43:37 · 551 阅读 · 0 评论 -
我的链式编程
在编写代码时,通过点(.)调用的方式,将代码连接成一行,大大增加了代码的可读性,这就是链式编程。实现链式编程的关键就是声明一个block的属性,而这个block返回值必须还是一个对象(根据业务需求不同,可以返回的是这个对象实例本身,也可以是这个类的另一个实例,更可以是另一个类的实例对象)。而block中内部的逻辑就是项目的业务逻辑。 注意事项 1 不需要考虑调用顺序,只需要知道考虑结果原创 2017-07-04 12:22:23 · 369 阅读 · 0 评论 -
block代码块的使用
block代码块功能类似于 delegate代理。即也用来由 B对象代理完成 A对象的事件。区别1、不用定义协议(协议名称、协议方法、代理);2、实现方法比较直观(实现代码比较紧凑,即代码块方法,紧接在对象实例化之后,避免多行空隔设置)3、定义 block属性对象时,应用 copy类型,而定义 delegate对象时应用 assign原创 2016-07-02 22:43:24 · 636 阅读 · 0 评论 -
iOS中的block和retain cycle (经典)
retain cycle 的产生说到retain cycle,首先要提一下Objective-C的内存管理机制。作为C语言的超集,Objective-C延续了C语言中手动管理内存的方式,但是区别于C++的极其非人道的内存管理,Objective-C提出了一些机制来减少内存管理的难度。 比如:内存计数。在Objective-C中,凡是继承自NSObject的类都提供了两种方法转载 2014-05-17 17:01:03 · 678 阅读 · 0 评论 -
运行时机制重写descrption实现实体模型数据打印查看
使用前打印实体模型时,结果是这样的(lldb) po self.userModel&lt;SXLoginModel: 0x7fb08bc36aa0&gt;使用后打印实体模型时,结果是这样的(lldb) po [self.userModel descriptionShow]deptName : 南京校区;lastSigninTime : 2018-07-13 16:16:...原创 2018-07-13 16:30:53 · 393 阅读 · 0 评论