随笔分类 - 内存管理
摘要:当对象引用计数为0时,运行时会调用_objc_rootDealloc,实现如下: - (void)dealloc { _objc_rootDealloc(self); } _objc_rootDealloc(id obj) { assert(obj); obj->rootDealloc(); } i
阅读全文
摘要:retain源码分析 release源码分析 dealloc源码分析 retainCount源码分析 转自:https://www.jianshu.com/p/49e1895972a2
阅读全文
摘要:@interface List : NSObject { NSString *_name; } -(void)setName:(NSString *)name; -(NSString *)name; @end @implementation List -(void)setName:(NSString
阅读全文
摘要:一、结论 一个对象对外暴露的读写属性,如果这个属性在多个线程中访问,可能会出现crash。因此对外暴露的属性一定要考虑线程安全问题。 二、看下面的代码 #import "ViewController.h" #import <malloc/malloc.h> #import <objc/runtime
阅读全文
摘要:众所周知,iOS开发中,assign和weak都是弱引用,基础数据类型我们一般都是用assign修饰,而对象一般都是用weak修饰的。那么问题来了,如果用assign修饰对象,会产生什么的后果? 在弄清之前,我们首先要了解一下内存管理机制。我们初始化一个对象如下: Objct *obc =[ [Ob
阅读全文
摘要:首先了解weak是一种非拥有关系,属性所指的对象销毁时,属性值会自动置为nil weak是Runtime维护了一个hash(哈希)表,用于存储指向某个对象的所有weak指针。weak表其实是一个hash(哈希)表,Key是所指对象的地址,Value是所指对象的所有weak指针的地址数组。 当对象引用
阅读全文
摘要:atomic不是绝对的线程安全。atomic的本意是指属性的存取方法是线程安全的,并不保证整个对象是线程安全的 @property (atomic, assign) int intA; //线程A for (int i = 0; i < 10000; i ++) { self.intA = self
阅读全文
摘要:双向链表,编译后,autoreleasepool是一个全局变量,每一个线程,在runtime启动时都会准备一个autorelasepool,主要两个方法, push, poppush就是在page中插入一个哨兵对象,代表这些属于要一起release的对象,如果page满了,则创建新的page,并合老
阅读全文
摘要:因为父类指针可以指向子类对象,使用 copy 的目的是为了让本对象的属性不受外界影响,使用 copy 无论给我传入是一个可变对象还是不可对象,我本身持有的就是一个不可变的副本. 如果我们使用是 strong ,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,那么会影响该属性.
阅读全文
摘要:1.对应基本数据类型默认关键字是 atomic,readwrite,assign 2.对于普通的 Objective-C 对象 atomic,readwrite,strong
阅读全文
摘要:历史由来: 接触iOS的人都知道,@property声明的属性默认会生成一个_类型的成员变量,同时也会生成setter/getter方法。 但这只是在iOS5之后,苹果推出的一个新机制。看老代码时,经常看到一个大括号里面定义了成员变量,同时用了@property声明,而且还在@implementat
阅读全文