oc
文章平均质量分 65
swel
凄凄切切群群群群群群群群群群群群群群群群群
展开
-
block(4) - 本地对象和block及__block修饰符
本地对象和block及__block修饰符1、看其底层实现 //__block声明而多出来的结构体 struct __Block_byref_b_0 { void *__isa; __Block_byref_b_0 *__forwarding; int __flags; int __size; void (*__Blo...原创 2018-02-08 17:57:03 · 240 阅读 · 0 评论 -
runtime(1) - 消息发送机制
1、消息发送机制1、[ ]发送消息 2、将[ ]发送消息转换为cpp代码//在命令行输入此命令即可clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs...原创 2018-03-08 15:11:23 · 189 阅读 · 0 评论 -
extension(类扩展)和 category(类别)
extension(类扩展)1、进行一个类扩展原创 2018-02-28 17:26:31 · 6258 阅读 · 0 评论 -
runtime(2) - 方法欺骗
方法欺骗是指在运行时候动态的交换所调用的方法。1、原理 2、代码实现原创 2018-03-08 20:16:01 · 160 阅读 · 0 评论 -
kvo(key value observer)
kvo 用来观察对象的属性是否发生变化1、建立一个Test类 2、添加观察者原创 2018-03-09 10:50:10 · 110 阅读 · 0 评论 -
block(6) - ARC、MRC及block之间的循环引用
2、易发生在block如://.h文件在ARCtypedef void(^block)(void);@interface Test : NSObject@property (nonatomic,copy)block testBlock;@property (nonatomic,assign)NSInteger temp;@property (nonatomic,copy)...原创 2018-03-12 15:56:30 · 371 阅读 · 0 评论 -
内存管理(2) - property修饰符和object所有权
前言property修饰符和object所有权有一些关联。1、属性中的修饰符的内存管理实现assign(默认)(ARC、MRC都有)用于CGFloat、NSInteger、基本数据类型(c类型) 用于不保留变量的对象、即相当创建弱引用而避免循环引用的发生- (void)setter:(tupe *)xxxx //调用其setter方法时{ _...原创 2018-05-01 16:44:34 · 275 阅读 · 0 评论 -
内存管理(3) - Autorelease Pool(大部分摘抄自black)
前言NSAutoreleasePool(仅MRC有)NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];//作用范围从释放池创建到释放池release[pool release];@autoreleasepool(MRC、ARC都有)@autoreleasepool //比NSAutorelease...原创 2018-05-01 16:46:36 · 153 阅读 · 0 评论 -
内存管理(6) - 内存泄漏工具及其使用
前言原创 2018-05-01 23:15:55 · 106 阅读 · 0 评论 -
property(2) - 修饰属性的关键字
属性扩展属性的线程安全修饰实例变量,使其线程中是否安全,或者高效nonatomic 和 atomic (默认) 1 atomic用于多线程中,是原子性的(即它的方法有加锁和解锁的过程) 2 nonatomic用于单线程,非原子性,因为没有加锁和解锁的过程所以效率比atomic的高但是其安全隐患大属性的语义通过使用点方法给实例变量赋值,而实例变量所拥有的特性...原创 2018-05-09 15:17:47 · 230 阅读 · 0 评论 -
property(3) - 属性的底层探究
1原创 2018-05-11 15:15:21 · 240 阅读 · 1 评论 -
runtime(3) -
11111111111111111111原创 2018-06-06 17:10:53 · 144 阅读 · 0 评论 -
block(3) - 变量与__block修饰符
__block修饰变量的时候时候1、__block修饰本地变量转为cpp的样子 //用__block修饰的本地变量b多了这个结构体 struct __Block_byref_b_0 { //直译为本地变量b在block中是通过引用的 void *__isa; __Block_byref_b_0 *__forwar...原创 2018-02-08 16:53:23 · 452 阅读 · 0 评论 -
内存管理(5) - 关于retainCount在不同场合输出值不符合预期的分析
1、NSString、NSMutableString 和 NSArray、NSMutableArrayvoid x(void){ NSString *str = [[NSString alloc]init]; //定义初始一个对象 //NSArray *str = [[NSArray alloc]init]; //这句的下面的结果也是一样的 NSLog(@"st...原创 2018-02-08 15:52:30 · 178 阅读 · 0 评论 -
block(1) - block的底层
一、什么是代码块?代码块的底层实现是结构体1、block的内存实现 struct Block_layout { void *isa; //指向所属类的指针,即block的类型 int flags; //标志变量,操作block内部时会用到 in...原创 2018-02-08 15:50:32 · 413 阅读 · 0 评论 -
id相关
动态数据类型和静态数据类型动态数据类型只有在运行时候才知道其类型和属性静态数据类型在编译的时候就知道其类型和其属性,并在编译时可访问其属性1、消息发送机制id (动态数据类型)id是指针,id*是指针的指针id 有时很危险 NSString *s = @"ab"; id obj = s; //id为指向任何类型...原创 2018-01-22 20:01:20 · 162 阅读 · 0 评论 -
strong和copy
以下对使用strong 和 copy的地方都适用.h @interface Test : NSArray @property (nonatomic,strong) NSArray * sArray; @property (nonatomic,copy) NSArray * cArray; - (void) pri; @end.m...原创 2018-01-25 20:01:30 · 162 阅读 · 0 评论 -
protocol(协议)和 delegate(委托)
protocol(协议)使用delegation委托的场景实现不同页面的数据交互、可以用在界面跳转、界面传值、跳转页面刷新数据、监听事件等。当delegate的事件触发时,delegate才会被调用。...原创 2018-01-18 21:21:54 · 221 阅读 · 0 评论 -
关于const 、NSxxxx(不可变)、NSMutablexxxx(可变) 的区别
NSxxxx 、NSMutablexxxx 、const之间的关系都差不多、这里用NSString 、NSMutableString来讲NSString的不可变 NSString *string = @"one"; //其实是string指针指向的地址的内容不可变(如@“one”的内容是不可变的) //问题1 :@“one”的内容为啥不可变? //原创 2018-01-25 14:53:14 · 228 阅读 · 0 评论 -
property(1) - 属性的基本知识
属性知识点属性@property预编译指令的作用是自动生成setter和getter方法@synthesize表示创建了该属性的访问代码(xcode4.5后不再用了)实例变量名和属性名一致,因为属性基于变量实例变量可以在头文件或者实现文件 , 区别是子类可以通过属性访问头文件中的,而实现文件中的为本类所有,子类不可见点表达式出现在左调用setter,出现在右调用gettercopy...原创 2018-01-18 14:53:38 · 524 阅读 · 0 评论 -
block(5) - block需要特别注意的地方
1、ARC下也是有栈block的1、ARC下,栈block 2、ARC下,堆block 3、MRC下,栈block 疑问 1:对比2,3,同样的代码在ARC,MRC下的block的类型居然不同,为什么呢? - 在ARC下,block如果通过 = 进行传递时,会导致调用objc_retainBlock->Block_copy->_Block_copy_intern...原创 2018-02-08 19:52:00 · 280 阅读 · 0 评论 -
内存管理(1) - 引用计算的基本操作
内存管理内存管理其实就是对引用计数的管理,需要从MRC和ARC两方面探讨,其中MRC与ARC的主要区别是MRC下需要手动retain、release、autorelease等在ARC下会自动完成。1、引用计数相关操作 对象操作 OC中对应的方法 对应的 retainCount 变化 生成并持有对象 alloc/new/copy/mutableCop...原创 2018-01-17 21:45:45 · 224 阅读 · 0 评论 -
内存管理(4) - 循环引用
当用指针指向某个对象时候,可以对其进行管理(通过retain和release)就拥有对这个对象的强引用或弱引用1、什么是循环引用?结论:当两个对象相互持有对方(即拥有对对方的强引用),此时各自的引用计数都为1,释放不了,而造成内存泄露。当多个对象能形成一个环时候情况类似。用weak或者__weak创建归零弱引用 因为c指向的地方被释放了,调用它可能会导致问题,...原创 2018-02-08 22:34:35 · 323 阅读 · 0 评论 -
self 和 super
https://www.jianshu.com/p/15fa5e84c897转载 2018-02-16 13:54:12 · 95 阅读 · 0 评论 -
block(2) - 变量与block
block和variable1、本地变量与block的关系及其变化 int main(int argc, const char * argv[]) { @autoreleasepool { int a = 10; int b = 20; NSLog(@"&a:%p ,&b:%p ,a:%d ,...原创 2018-02-08 15:42:33 · 271 阅读 · 0 评论 -
NSNotification、delegate、kvo、block的对比
1、NSNotification(通知)描述: 有一个NSNotification Center的单例对象,允许事件发生时通知其它对象。通知中心完成观察者注册、发送通知、移除观察者操作。使用: NSNotification的使用包括注册通知、观察者注册、发送通知、移除观察者操作。注意: 1、同一个通知注册同一个观察者多次,而且调用的方法一样。那么这个方法会调用多次。 2、移...原创 2018-06-10 21:41:58 · 261 阅读 · 0 评论