Objective-C基础(二)

1. OC对象

OC对象可以分为三类:

  1. 实例对象 instance —— 存储isa指针和成员变量的值
  2. 类对象 class —— 存储isa指针,superclass指针,属性信息,对象方法信息,协议信息,成员变量信息
  3. 元类对象 meta-class —— 存储类方法信息

这里需要注意的是,instance对象仅存储的成员变量的值,并没有存储成员变量的其它信息,例如成员变量名、成员变量类型,这些信息存储在class对象中。 举个例子,假设上帝创造了人类,并赋予了人类身高、体重、年龄等成员变量,以及吃喝拉撒等方法,那么这些信息是写在人类这个class对象中的; 女娲造人时,就根据人类这个class对象,捏出一个个包含实际成员变量值的各个不同的人,这些人的身高、体重、年龄各不相同,由他们自己存储,但是他们的方法信息,是存储在class对象中,是统一的,所以说我们每个人都得吃喝拉撒。

这里需要的注意的是元类对象,一个类可能有对象方法,也可能有类方法,而类方法信息统统存储在元类对象中。

关于isa指针,这里有一张经典的图:

从图中看出:

  1. instance对象的isa指针指向class对象
  2. class对象的isa指针指向meta-class对象
  3. meta-class对象的isa指针指向基类meta-class对象
  4. class对象的superclass指针指向父类class对象,基类class对象的superclass指针为nil
  5. meta-class对象的superclass指针指向父类meta-class对象
  6. 基类meta-class对象的superclass指向基类class对象(这点非常反人类,需要重点记忆一下)

2. class / object_getClass

需要注意这两个方法的异同。

  1. 对一个instance对象调用这两个方法,返回的都是其对应的class对象。
  2. 对一个class对象调用class方法,无论调用多少次,返回的都是这个class对象本身; 对一个class对象调用object_getClass方法,返回的是其对应的meta-class对象。

也可以如下记忆:

  1. 对于class方法,如果是instance对象,返回其class对象;如果是class对象,无论调用多少次,返回class对象本身。
  2. 对于object_getClass对象,返回其isa指针指向的对象。

感兴趣的同学可以读一下源码:

// 类方法,返回自身
+ (Class)class {
    return self;
}
 
// 实例方法,查找isa(类)
- (Class)class {
    return object_getClass(self); // 注意这里调用的其实就是object_getClass方法
}

Class object_getClass(id obj)
{
    if (obj) return obj->getIsa(); // 返回isa指针
    else return Nil;
}

3. 方法的隐式参数

OC中所有的方法调用,都包含两个隐式参数,即不被显式写出来的参数,分别为:self, _cmd。

其中,self表示调用这个方法的那个对象; _cmd就是当前被调用的这个方法的方法名。

举个例子:

// 假设universe类有如下类方法
+ (void)printAxio:(NSString *)axio {
	NSLog(@"%@", axio);
}

// 我们调用这个类方法
[universe printAxio:@"文明不断增长和扩张,但宇宙中的物质总量保持不变"];

// 这里的显示参数为axio,即@"文明不断增长和扩张,但宇宙中的物质总量保持不变"
// 而隐式参数1,self,为该方法的调用者,即universe类对象
// 隐式参数2,_cmd,为方法名,即printAxio

好啦,今天就先讲到这里。

大家需要着重理解知识点1和2,特别是知识点1,非常重要哦‼️

我的牛客网账号是917470656,上面有我记录的几篇面经。

个人公众号:iOS开发学习

未经作者允许,禁止转载!

#iOS开发工程师##iOS开发工程师实习生##iOS工程师##iOS开发实习生##学习秋招#
iOS开发学习 文章被收录于专栏

学习iOS开发 == 手握大厂offer

全部评论

相关推荐

行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务