今天先补充一下很有必要记住的东西.
objective-c 格式化输出符号
%@ 对象
%d, %i 整数
%u 无符整形
%f 浮点/双字
%x, %X 二进制整数
%o 八进制整数
%zu size_t
%p 指针
%e 浮点/双字 (科学计算)
%g 浮点/双字
%s C 字符串
%.*s Pascal字符串
%c 字符
%C unichar
%lld 64位长整数(long long)
%llu 无符64位长整数
%Lf 64位双字
%e 是实数,用科学计数法计的
复合
复合貌似是一个新概念,和继承有什么区别呢?
继承之间是A是一个( is a )B
而复合是A中有一个( has a )B
举个例子, 一台电脑由主机,显示器,鼠标,键盘...等等组成.
其中每一部分都有各自的功能和作用,组合到一起就会发挥更大的作用,
这就是复合.但是你不能说鼠标是继承了电脑吧.
需要注意的是:
严格的讲,只有对象间的组合才能叫复合,像int ,float ,enum ,struct 等基本数据类型都被认为是对象的一部分。
这个时候
- @class的作用就是告诉编译器,有这么一个类,用吧,没有问题。
- 在对象复合时,使用@class非常有用,因为被复合的对象只需要在整体中声明变量即可,所以需要知道有这么一个类即可。但是通过#import 来引入这个类的话需要首先编译这个类才行,使用@class就不要再#import这个被复合的类了
- 复合时只需要声明变量,不需要调用对象中的方法,所以使用@class即可,如果.m中需要调用该类下得方法,则不能使用@class引入类,二用#import。
- @class 还可以解决循环依赖关系的问题,例如A.h 导入了 B.h ,而B.h 导入了 A.h ,每一个头文件的编译都要让对象先编译成功才行,使用@class 就可以避免这种情况的发生。