OC概念补充(结构体作为对象属性、多文件开发)
description方法
问题1:使用%@打印一个对象,输出的是什么内容?%@的原理是什么?
答:
- %@是用来打印对象的, description方法默认返回对象的描述信息(默认实现是返回类名和对象的内存地址). 其实%@的本质是用于打印字符串.
- 只要利用%@打印某个对象, 系统内部默认就会调用父类的description方法 调用该方法, 该方法会返回一个字符串, 字符串的默认格式 <类的名称: 对象的地址>
问题2:重写description方法注意点?
答:
- 如果在description方法中利用%@输出self会造成死循环
- 建议: 在description方法中尽量不要使用self来获取成员变量 因为如果你经常在description方法中使用self, 可能已不小心就写成了 %@, self
问题1:OC中%@ 是做什么用的?
答:输出OC的字符串使用%@, %@就专门用于输出对象类型的
问题2:如何计算字符串的长度?
答:OC中调用length方法,计算字符的个数, 而不是占用的字节数
结构体作为对象属性
问题:如何将作为属性的结构体进行初始化?
答:
typedef struct {
int year;
int month;
int day;
} Date;
结构体作为对象属性
//方法一:强制转换
stu->_birthday = (Date){1986, 1, 15};
//方法二:定义一个新的结构体,给d赋值,将d赋值给_birthday
Date d = {1986, 1, 15};
stu->_birthday = d;
//方法三:分别赋值
stu->_birthday.year = 1986;
stu->_birthday.month = 1;
stu->_birthday.day = 15;
OC多文件开发
问题1:为什么要使用多文件?
答:
一个iOS项目可能会有多个人开发,如果多个人同时修改一个文件,那么就很可能会产生冲突,比如这个增加一个方法,那个人把这方法删掉了。另外就是当把多个人写功能合并起来的时候,也非常困难,写到一个文件中,无法顺畅的进行团队合作
问题2:OC中如何进行多文件开发?
答:
- 在工作中,通常把不同的类放到不同的文件中,每个类的声明和实现分开
- 声明写在.h头文件中,
- 实现写在相应的.m文件中去,
- 类名是什么,文件名就是什么
问题3:使用多文件开发有什么好处?
答:
- 显著提高团队协作的效率
- 提高程序的开发速度
- 提高程序的可维护性
- 提高代码的可读性
匿名对象
问题1:什么是匿名的对象?匿名对象和之前所用的对象有什么区别?
答:匿名就是没有名字, 匿名对象就是没有名字的对象.
- 有名字的对象
// 只要用一个指针保存了某个对象的地址, 我们就可以称这个指针为某个对象
// 称p为Person对象
Person *p =[Person new];
p->_age = 30;
p->_name= @"lnj";
[p say]; - 没有名字的对象
// 无论有没有名字, 只要调用new方法都会返回对象的地址
// 每次new都会新开辟一块存储空间
[Person new]->_age = 30;
[Person new]->_name = @"LMJ";
[[Person new] say];
问题2:匿名对象应用场景?
答:
- 当对象只需要使用一次的时候就可以使用匿名对象
- 匿名对象可以作为方法的参数(实参)
未来有你才精彩,你有未来不是梦!