学习了这么久的设计模式方面的知识,最大的感触就是,设计模式不能脱离语言特性。近段时间所看的两本书籍,《大话设计模式》里面的代码是C#写的,有一些设计模式实现起来也是采用了C#的语言特性(C#的API,抽象类,在OC中是没有抽象类、没有多继承关系),《设计模式之禅》里面的代码是JAVA写的,与OC差距也是比较大。
但是我想,这些都不是问题,学习设计模式主要学习的是其中的思想,并将之改造成自己所熟悉语言的模式,大同小异。所需要注意的是,在学习的过程中,将之与语言结合起来,多思考、多实践。
- KVC
KVC: key values coding 键值编码,间接通过字符串对应的key取出、修改其对应的属性。
作用: 可以访问和修改私有成员变量、readOnly成员变量的值。(替换系统自带的导航栏、替换系统自带的Tabbar等)
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@interface
ZYPerson :
NSObject
@property
(
nonatomic
,
copy
,
readonly
)
NSString
*name;
- (instancetype)initWithName:(
NSString
*)name;
@end
#import "ZYPerson.h"
@implementation
ZYPerson
- (instancetype)initWithName:(
NSString
*)name
{
if
(
self
= [
super
init]) {
_name = name;
}
return
self
;
}
@end
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#import "ViewController.h"
#import "ZYPerson.h"
@interface
ViewController ()
@end
@implementation
ViewController
- (
void
)viewDidLoad {
[
super
viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
ZYPerson *personOne = [[ZYPerson alloc] initWithName:@
"张三"
];
NSLog
(@
"%@"
,personOne.name);
// 然后,我发现名字写错了,需要修改
|