OC中类基础
OC中类的定义分为接口定义和实现两部分
以下为Circle类的接口定义
@interface Circle: NSObject {
// 接口定义,声明属性或方法
}
@end
@implementation Circle {
// 具体方法实现
}
@end
// 使用上通过[Circle new]获取一个实例
OC中的继承和组合
继承
OC为单继承
@interface SubClass: SuperClass
@end
@implementation SubClass
@end
当调用子类实例的一个方法时,会现在实例中进行寻找,找不到时会向上寻找其父类,这其中涉及了OC的isa指针和class指针,学习参考
组合
组合即在一个类中持有其他类对象,是has a的关系,而类基础则为is a的关系
ps.在cocoa编程规范中获取实例属性值时的方法应为 属性名: {}的形式而非 get属性名:{}的形式
跨文件的依赖关系
依赖关系可以是两个实体间的一种关系,也可以存在两个或多个文件中,当任一文件发送了变化则所有依赖它的文件都会被重新编译,因此但一个文件(如某些头文件)被多个其他文件导入时会导致这些文件都要重新生成会花费大量时间。
为了减少因为依赖关系一起的大量重新编译可以使用@class
,在对象复合中,复合通过指针指向对象,因为OC对象都使用动态分配的内存,则编译器只需知道这是一个类即可,而@class就是建立了一个前向引用告诉编译器这只是一个类后面你会知道这个是什么。
通过@class也可以应用在相互引用中,在相互引用中使用#import会出现变异错误
OC一些基本类
NSArray只能存对象,不能存nil
NSArray的三种遍历方法
- 下标遍历
NSEnumerator
枚举
NSEnumerator *enumerator = [array objectEnumerator];
while(id item = [enumerator nextObject]) { // 当nextobject返回nil时循环结束
//...
}
- 快速枚举
for (id item in array) {}
- 代码块方法
[array enumeratorObjectsUsingBlock: ^(id item , NSUinteger idx, BOOL *stop)
{
}];
// 相比于快速枚举,代码块可以让循环操作并发执行,而通过快速枚举执行操作要一项项线性完成
在OC中很多类似以类簇的方式实现的,因此若想创建NSString
、NSArray
、NSDictionary
的子类会和设想有所出入,最后是以复合的形式对他们进行扩展.
OC中不支持基础类型若int,float
等和对应封装类的自动封开箱。
[NSNull null]
总是返回一样的值故可以通过==
进行判断
OC文件读取相关
NSFileManager
对文件进行操作
突然看到了奇怪的知识??