2013.1.11

来源:互联网 发布:电梯三菱plc编程实例 编辑:程序博客网 时间:2024/05/16 11:14

#import和@class的区别

在ios中我们经常会在.h和.m中引入一些类啊等等一般用的是#import来进行声明,我们可能也见

到在.h文件进用@class来声明的,那么#import和@class进行声明 到底有什么的区别呢?

1.#import会包含这个类的所有信息,包括实体变量和方法,而@class只告诉编译器,声明的类

的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你,所以在头文件中如果用

@class声明某个类后,在.m的实现中如果用到声明类的具体方法或变量时还得再#import类 

2.在.h头文件中进行声明时用#import的话,如果100个头文件都#import同一个头件,或者这些

文件是依次引用的,如A->B,B->C,C->D,当最开始的那个头文件有变化后进行编译时,后面所有

引用它的类都需要重新编译,如果引用最开始的头文件的类很多的话,那么这将耗费大量的时间

,而用@class则不会,可能有人会想即然.h只是用@class只是简单的一个声明告编译器有这个类

不让其报错,那么.m中要用到引入的类的方法和属性时,不还是要#import头文件一次,是的这个

是对的,但编译器编译的时候只编译头文件的,所以你的.m中用#import与编译时间没太大关系

3.接下来说说什么时候该用@class,什么时候该用#import进行声明,

  (1)一般如果有继承关系的用#import,如B是A的子类那么在B中声明A时用#import

  (2) 另外就是如果有循环依赖关系,如:A->B,B->A这样相互依赖时,如果在两个文件的头文

件中用#import分别声明对方,那么就会出现头文件循环利用的错误,这时在头文件中用@class

声明就不会出错

 (3)还有就是自定义代理的时候,如果在头文件中想声明代理的话如@interface

SecondViewController:UIViewController时应用#import不然的话会出错误,注意XXXX

Delegate是自定义的


Q:什么是同事类?是兄弟类的别名?

#import相比#include,前者可以避免头文件被重复引用,而后者不能。#import<>相比

#import"",前者包含头文件一般是系统或编译环境提供的头文件(库函数、框架、编译器提供的

类)。后者一般是自定义文件,先在本地文件(或本工程项目)中寻找该头文件,如果未找到再

在系统中查找该文件。

printf()与NSLog()的区别
 后者较前者添加了一些特性:时间戳、日期戳、自动附加换行符('\n')等。
 两者的输入类型也是有区别的NSLog期待NSString*,而printf期待const char *。
 NSLog支撑%@去打印一个对象类型,当应用%@时,它会给对象发送消息description

,所以若是你组合了一个新的类,你可以经由过程给本身重载description来实现打印DEBUG

原创粉丝点击