首页 > 代码库 > autorelease、Block、Category、ARC
autorelease、Block、Category、ARC
1.autorelease方法的基本作用
- 给对象发送一条autorelease消息, 会将对象放到一个自动释放池中
- 当自动释放池被销毁时,会对池子里面的所有对象做一次release操作
- 会返回对象本身
- 调用完autorelease方法后,对象的计数器不变
autorelease的好处 :
- 不用再关心对象释放的时间
- 不用再关心什么时候调用release
- autorelease的使用注意
- 占用内存较大的对象不要随便使用autorelease
- 占用内存较小的对象使用autorelease,没有太大影响
在iOS程序运行过程中,会创建无数个池子。这些池子都是以栈结构存在(先进后出)
当一个对象调用autorelease方法时,会将这个对象放到栈顶的释放池
自动释放池的创建方式
iOS 5.0前 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; [pool release]; // [pool drain];
iOS 5.0 开始 @autoreleasepool { }
2.Block的定义格式
返回值类型
(^block变量名)(形参列表) = ^(形参列表) { };
调用Block保存的代码: block变量名(实参);
使用typedef定义Block类型: typedef 返回值类型 (^block类型名称)(形参列表);
3.Category:分类
- 分类只能增加方法, 不能增加成员变量
- 分类可以访问原来类中的成员变量
- 如果分类和原来类出现同名的方法, 优先调用分类中的方法, 原来类中的方法会被忽略
方法调用的优先级(从高到低)
- 分类(最后参与编译的分类优先)
- 原来类
- 父类
声明
#import "Student.h”
@interface Student (Study)
@end
实现
#import
"Student+Study.h”
@implementation
Student (Study)
@end
4.ARC的实现细节
- 编译器会自动在适当的地方插入适当的retain、release、autorelease语句
- 也就是说, 编译器会自动生成内存管理的代码, 不用程序猿手动编写
- 如果是手动管理内存, 可以简称MRC (Manual Reference Countin ARC的判断原则
- 只要还有一个强指针变量指向对象,对象就会保持在内存中
- 强指针,被__strong修饰的指针,默认所有指针变量都是强指针 弱指针,被__weak修饰的指针
- 不能调用release、retain、autorelease、retainCount 可以重写dealloc,但是不能调用[super dealloc]
ARC中的@property
- strong : 用于OC对象, 相当于MRC中的retain
- weak : 用于OC对象, 相当于MRC中的assign
- assign : 用于基本数据类型, 跟MRC中的assign一样
- copy : 一般用于NSString, 跟MRC中的copy一样
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。