objective-C基础教程(第2版)-前九章杂记

本文介绍了Objective-C(OC)中的类定义,包括接口和实现部分,以及如何通过[Circlenew]创建实例。OC采用单继承,示例展示了SubClass继承自SuperClass。OC中的组合是通过has-a关系实现,而不是isa关系。通过@class可以避免头文件循环导入问题,减少编译时间。此外,文章还提及了NSArray的基本操作,如下标遍历、NSEnumerator枚举和快速枚举,并指出OC不支持基础类型与封装类的自动转换。最后提到了OC中常见的类簇实现方式,如NSString、NSArray、NSDictionary,以及使用NSFileManager进行文件操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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中很多类似以类簇的方式实现的,因此若想创建NSStringNSArrayNSDictionary的子类会和设想有所出入,最后是以复合的形式对他们进行扩展.


OC中不支持基础类型若int,float等和对应封装类的自动封开箱。
[NSNull null]总是返回一样的值故可以通过==进行判断

OC文件读取相关
NSFileManager对文件进行操作

在这里插入图片描述
突然看到了奇怪的知识??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值