oc内存的理解

oc中的内存管理,是靠引用计数器,只要计数器变成0就会回收
可以调用returnCount方法来返回计数器数

调用这个对象的copy,retain,new,alloc方法都可以将引用计数器+1
当调用这个对象的release方法这个方法可以将引用计数器-1

当一个对象快要被回收的时候会调用一个析构函数dealloc方法。一般要使用的时候,这个方法都会被复写下

当要复写这个dealloc方法的时候,最后还是要调用一下父类的dealloc方法的,感觉和重定义初始化方法要调用父类的init一样
-(void)dealloc{
  //insert your code;
  [super dealloc];
}
野指针就是访问了一块访问了一个不属于自己得内存,当堆空间被释放的时候,我们还用栈空间的指针来访问这块地址就会出错,(其中用什么来验证其指向的内存不属于自己的,还不了解)

当[[[Student alloc]init]autorelease]这是指将这个对象放到了自动释放池子,
当这个自动释放池被销毁的时候,池子里面的所有的对象都会调用一次release方法。


oc内存管理法则,谁污染谁治理,
当一个对象1要拥有一个对象的时候,可以在这个对象的setter函数里面调用一次这个对象的retain方法,引用计数器+1,
当这个对象1dealloc方法里面调用release方法
-(void)dealloc{
  [_book release];书就是拥有的那个对象。
  [super dealloc];
}

-(void)setBook:(Book *)newBook{
  _book=[newBook retain];
}

@class  Book;

这个关键字可以提高编译性能。//在.h文件中,才这样声明,但当要真正用到这个类的时候用import关键字导入,在.h文件中的父类必须是用import,因为继承必须要知道这个类到底又哪些方法和属性。

有这么一个情况,当2个类你中有我,我中有你,就必须用@class用#import会造成递归导入。

总结就是:.h文件中用@class,在.m文件中用#import。特殊情况,视情况而定。

 

 

静态方法的潜规则我们都将对象丢到自动释放池

比如有个Student这个类,

+(ID)studentWithAge:(int)age{

Student *stu=[[[self alloc]init]autorelease];

stu.age=age;

return stu;

}

 

 

posted @ 2014-03-18 16:30  离子  阅读(641)  评论(0编辑  收藏  举报