-------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------
@property参数:
@property (retain) Book *book;
// retain:自动生成setter里面会release旧值,retain新值。
① 内存管理相关参数
l retain:release旧值,retain新值(适用于oc对象类型)
l assign:直接赋值(默认,适用于非oc对象类型)
l copy:release旧值,copy新值
② 是否要生成set方法
l readwrite:同时生成setter和getter的声明、实现(默认)
l readonly:只会生成getter的声明、实现
③ 多线程管理
l nonatomic:性能高
l atomic:性能低(默认)
④ setter和getter方法名称
l setter:决定了set方法的名称,一定要有冒号
l getter:决定get方法的名称(一般用在BOOL类型)
@class
@class的作用:仅仅告诉编译器,某个名称是一个类
@class 类名
开发中引用一个类的规范
1> 在.h文件中用@class来声明类
2> 在.m文件中用#import来包含的所有东西
3> 非ARC:两端循环引用解决方案:一端用retain,一端用assign
autorelease的基本用法:
方法会返回对象本身,会将对象放到一个自动释放池中,当自动释放池被销毁时,会对池子里面的所有对象做一次release操作。
调用完autorelease方法后,对象的计数器不变
autorelease的好处:
① 不用再关心对象释放的时间
② 不用再关心什么时候调用release
autorelease的注意点:
① 占用内存较大的对象不要随便使用autorelease
② 占用内存较小的对象使用autorelease,没有太大意义
错误写法:
① alloc之后调用了autorelease,又调用release
② 连续调用多次autorelease
自动释放池:
ios5.0前
NSAutoreleasePool *pool = [[NSAutoreleasePoolalloc] init];
[pool release];
ios5.0后:
@autoreleasepool创建自动释放池
① 在ios程序运行过程中,会创建无数个池子。这些池子都是以栈结构存在(先进后出)
② 当一个对象调用autorelease方法时,会将这个对象放到栈顶的释放池
1系统自带的方法里面没有包含alloc、new、copy,说明返回的对象都是autorelease的
2 开发中经常会提供一些类方法,快速创建一个已经autorelease过的对象
创建对象时不要直接用类名,一般用self
-------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------