摘要: __bridge_retained(可以使要转换的变量也持有所赋值的对象) void *p=0; { id obj=[[NSObject alloc] init]; p=(__bridge_retained void*)obj; } NSLog(@"class=%@",[(__bridge id)p 阅读全文
posted @ 2020-03-24 16:31 zbblogs 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 众所周知,我们在使用NSTimer或者CADisplayLink的时候,经常会导致引用它们的类不能正常释放,那是因为引用它们的类与它们之间产生了循环引用。看以下代码: self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:se 阅读全文
posted @ 2020-03-23 21:42 zbblogs 阅读(416) 评论(0) 推荐(0) 编辑
摘要: __attribute__ 可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。 其位置约束为: 放于声明的尾部“;” 之前 __attribute__ 书写特征为: __attribute__ 前后都 阅读全文
posted @ 2020-03-21 22:07 zbblogs 阅读(1356) 评论(0) 推荐(0) 编辑
摘要: ReactiveCocoa可以給一个方法的调用添加绑定,或者说是观察者。 rac_signalForSelector:fromProtocol:(绑定协议的方法) rac_signalForSelector:(绑定类的方法) 原理: 在当前类中设置关联属性,value:RACSubject 将传入s 阅读全文
posted @ 2020-03-21 17:54 zbblogs 阅读(497) 评论(0) 推荐(0) 编辑
摘要: objc_msgSend:用于对objc对象发送消息,执行objc的方法。 objc_msgSendSuper:同上一样,这里是调用objc父类对象的方法。 使用以上函数之前需要对它们做函数转换后,方可使用,以下是这些函数的注释 These functions must be cast to an 阅读全文
posted @ 2020-02-19 20:57 zbblogs 阅读(1913) 评论(1) 推荐(1) 编辑
摘要: 1 @interface ViewController () 2 3 @property (nonatomic, strong) dispatch_source_t timer; 4 5 @end 以上ViewController持有一个dispatch_source_t,注意:(如果dispatc 阅读全文
posted @ 2020-02-16 21:23 zbblogs 阅读(908) 评论(0) 推荐(0) 编辑
摘要: readwrite:是可读可写的特性;需要生成getter和setter方法的时候用到; readonly:只读特性,只生成getter方法;不想在类外修改该属性的时候用到; assign:赋值特性,setter方法将传入参数赋值给实例变量;仅在设置变量时使用; retain:持有特性,setter 阅读全文
posted @ 2020-02-13 15:57 zbblogs 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 1、#import是Object-c导入头文件的关键字,头文件不会重复导入的情况;而#include是c/c++导入头文件的关键字,头文件会出现重复导入的情况(c/c++头文件如何防止重复导入,参考#ifndef和#pragma once) 2、@class是告诉编译器某个类的声明,只有在代码执行时 阅读全文
posted @ 2020-02-13 15:38 zbblogs 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 1、Object-c的类不可以多重继承 2、可以实现多个接口,即:可以实现多个协议Protocol 3、Category是Object-c类中的分类,通过分类可以为Object-c的类添加扩展方法 4、一般来说采用分类的方式比较好,因为Category可以在不破坏原有类的代码结构的情况下,为该类扩展 阅读全文
posted @ 2020-02-13 14:51 zbblogs 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 首先我们要了解block的真实结构如下:参考:这里 block其实就是个struct类型,其中的descriptor中的signature正是我们想要的block的方法签名。那么我们只需要获取到signature,然后转换成NSMethodSignature,即可轻易的获取到我们想要的block的参 阅读全文
posted @ 2020-01-09 09:36 zbblogs 阅读(1397) 评论(0) 推荐(0) 编辑
摘要: 问题描述:因为objc是动态语言,对象的类型在运行时才会被确认,所以很容易出现一个定义为NSString类型的变量,在运行时的类型变成了NSNull,从而导致如下错误出现:-[NSNull stringByAppendingFormat:]: unrecognized selector sent t 阅读全文
posted @ 2019-12-30 16:35 zbblogs 阅读(1527) 评论(0) 推荐(0) 编辑
摘要: 首先上图,图中是我们的类的结构关系图 有一个People基类,他有一个与生俱来的的本能:eat,另外有一个Kid,这个Kid继承了这个本能,并且他学会了新的技能:say,我们想在Kid eat的时候先通知willEat,然后在eat;在say的时候,先通知willSay,然后在say。下面我们来上代 阅读全文
posted @ 2019-12-26 17:40 zbblogs 阅读(682) 评论(0) 推荐(0) 编辑
摘要: 1、resolveInstanceMethod:方法解析,这里是给你机会,给当前类动态添加方法,之后,运行时会继续尝试查找该类的方法 2、forwardingTargetForSelector:备选调用者,如果你返回一个备选调用者,那么方法调用将转给这个备选者执行 3、methodSignature 阅读全文
posted @ 2019-12-25 18:08 zbblogs 阅读(221) 评论(0) 推荐(0) 编辑
摘要: iOS9 通用链接的使用,主要是解决在网页中无缝跳转到app,当然也可以通过定义URLScheme的方式打开app,但是这样体验不是很好,因为通过URLScheme这种方式打开app的时候,浏览器总是会弹出安全提示。 阅读全文
posted @ 2019-12-18 11:26 zbblogs 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 自定义实现无限轮播的Banner,理解其中的原理,然后发挥自己的创意 阅读全文
posted @ 2019-12-17 11:54 zbblogs 阅读(901) 评论(0) 推荐(0) 编辑