码迷,mamicode.com
首页 > 其他好文 > 详细

28-oc@class和循环retain

时间:2016-03-04 20:54:23      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

@class

什么是@class?如何使用@class?

@class可以简单地引用一个类

@class具体使用:

在.h文件中使用@class引用一个类

在.m文件中使用#import包含这个类的.h文件

 


 

#import 和@class的区别

import是一个预编译指令, 他会将""中的文件拷贝到import所在的位置,并且import有一个特点, 只要""中的文件发生了变化, 那么import就会重新拷贝一次(更新操作)

@class仅仅是告诉编译器, @class后面的名称是一个类, 不会做任何拷贝操作

注意: 由于@class仅仅是告诉编译器后面的名称是一个类, 所以编译器并不知道这个类中有哪些属性和方法, 所以在.m中使用这个类时需要import这个类, 才能使用

 


 

什么是间接拷贝

如果都在.h中import, 假如A拷贝了B, B拷贝了C ,如果C被修改了, 那么B和A都需要重新拷贝.

因为C修改了那么B就会重新拷贝,而B重新拷贝之后相当于B也被修改了, 那么A也需要重新拷贝. 也就是说如果都在.h中拷贝, 只要有间接关系都会重新拷贝

 


 

使用@class如何解决间接拷贝问题

如果在.h中用@class, 在.m中用import, 那么如果一个文件发生了变化, 只有和这个文件有直接关系的那个文件才会重新拷贝

所以在.h中用@class可以提升编译效率

 


 

使用@class如何解决两个类相互拷贝问题?相互拷贝的原理是什么

1.如果两个类相互拷贝, 例如A拷贝B, B拷贝A, 这样会报错

2.解决方法: 在.h中用@class, 在.m中用import

3.原理:

因为如果.h中都用import, 那么A拷贝B, B又拷贝A, 会形成死循环如果在.h中用@class, 那么不会做任何拷贝操作, 而在.m中用import只会拷贝对应的文件, 并不会形成死循环

 


 

循环retain

什么是循环retain?

 如果A对象要拥有B对象, 而B对象又要拥有A对象, 此时会形成循环retain

 

如何解决的循环retain?

答:不要让A retain B, B retain A 即让其中一方不要做retain操作即可

28-oc@class和循环retain

标签:

原文地址:http://www.cnblogs.com/wc-Home/p/5243298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!