---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一 ARC默认开启关闭方法.
Xcode5之后的版本建立项目时默认的ARC选择开关已经不存在,所以默认开启ARC,想要关闭需要建立完project在那个蓝色的图标中右边一栏下拉至Apple LLVM5.1-Language=Objective C一项中的 ARC设置为No.
二 内存管理OC的方式
1.引用计数器的方式.
当使用alloc new 或者copy创建一个新对象时,系统会自动将新对象的计数器默认设置为1,若当计数器为0时,对象就会被从内存中释放.,而通过retain与release可以对对象进行计数器增减操作,方便对象在内存中的管理. 使用retainCount可以获得当前的计数器值.而当回收对象时,调用dealloc,[super dealloc]一定放在最后面.
如:
int main()
{
Person *p = [[Person alloc] init];
[p retain];
[p release];
[p release];
[p retain];
return 0;
}
dealloc的用法:在相应的类实现文件中如Person.m
#import "Person.h"
@implementation Person
- (void)dealloc
{
NSLog(@"Person对象被回收");
[super dealloc];
}
@end
内存管理的原则:谁创建,谁release,谁调用retain,谁release. 有过计数器+1,那就必须之后-1.
2.对于set方法,当变量是基本数据类型的时候,不变,
针对OC对象类型,按照是否新的对象判断如下
- (void)setCar:(Car *)car
{
// 1.先判断是不是新传进来对象
if ( car != _car )
{
// 2.对旧对象做一次release
[_car release];
// 3.对新对象做一次retain
_car = [car retain];
}
}
3.对于@property参数一般使用的方法:
set有retain assign copy readwrite readonly等参数,
线程管理有nonatomic(性能高,一般使用) atomic(默认),
注意:返回BOOL类型的方法名一般以is开头
相关使用如:
@property (getter = isRich) BOOL rich;
@property (nonatomic, assign, readwrite) int weight;
@property (readwrite, assign) int height;
@property (nonatomic, assign) int age;
@property (retain) NSString *name;
4.上面的一个个的对象参数retain使用有了新的代替那就是autorelease自动释放池,添加参数autorelease会将对象创建到自动释放池中,当自动释放池销毁时,会自动将release消息发送给对象 对于系统自带的方法中,如果不包含alloc new copy 说明这些方法返回的对象都是已经autorelease过的.
5.循环使用:
@class的使用,声明该名称是个类,利用#import" "使用类中所有的内容.
7.arc的使用
Xcode5之后ARC是默认开启的,ARC方便了内存管理,是程序员不用将时间浪费在内存管理上,判断准则:只要没有强指针指向对象,就会释放对象.
ARC既然包含了内存管理,那么之前的内存管理所使用的方法,各种参数就被禁止了,release retain retainCount 不可以调用,dealloc可以重写,但是不允许调用[super dealloc],@property的参数 分strong weak assign(适用于非OC对象).
指针默认为强指针,也就是_strong, 弱指针为_weak.
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------