最近比较忙,看书的时间也不多,写文章的时间更没有了...
所以这一次准备把已看过的还没有成文的知识点简化然后发布在一篇文章中
iOS 高级开发技巧 2.对象、消息、运行期 (二) 在对象内部尽量直接访问实例变量
在对象内部的时候写入变量时,通过其设置方法来做:
self.name = @"Aquarius_Moon"
读取变量时,通过直接访问来做:
- (Nsstring *)getName{
return _name;
}
iOS 高级开发技巧 2.对象、消息、运行期 (三) 理解对象同等性这一概念
在比较两个对象的时候的不同对比方法:
NSString *str1 = @"Aquarius Moon";
NSString *str2 = [NSString stringWithFormat:@"Auqarius %@",@"Moon"];
if (str1 == str2) // 返回 NO<两个指针比较,当然不同>
if([str1 isEqual:str2]) //返回 YES<正确,但是过程会会比较复杂>
if([str1 isEqualToString:str2])// 返回YES <正确,恰当的使用方法>
通过这些方法,我们可以写自定义类的 isEqual 方法,中间的比较过程你可以自己进行判断。
iOS 高级开发技巧 2.对象、消息、运行期 (四) 以类簇模式隐藏实现细节
像UIButton那样的,我们创建的时候并不是alloc 然后init的,我们直接根据它不同的类型来创建。
它使使用了类簇模式,可以区分不同的类型但属于同一父类的子类。下面是一个自定义类的例子:
首先我们有一个基类:AquPerson,它有一个方法
+ (id)personWithType:(PersonType *)personType;
然后我们有三个子类 AquDeveloper/AquDesigner/AquBoss 均继承自 AquPerson。
然后我们在基类AquPerson 中 引入这三个子类,在 它的类方法中实现:
+ (id)personWithType:(PersonType *)personType{
switch(personType):
case personTypeDeveloper:
return [AquDeveloper new];
case personTypeProgrammer:
return [AquProgrammer new];
case personTypeBoss:
return [AquBoss new];
}
当然我们在AquPerson中必须要定义好一个work方法:
- (void)doWork;
这个时候,我们每个继承这个父类的子类都要去重写这个方法,例如AquDeveloper:
- (void)doWork{
[self writeCode];
}
然后当你调用的时候,就走的是下面的方法了。下面有一个他们之间的关系图:
以上内容就是本次的内容了,因为这三个知识点还是比较少的,所以我将他们放在一起了。
后面还会有运行期以及开发规则等的知识,希望各位多多注意啦。
最近发篇很少,因为实在太忙...书也才看了大半本,我会尽力更新哒~