曾经以为面向对象开发,无非就是封装成类嘛,没什么不同,但是今天在做这个小程序的时候,稍微体会到了一点所谓的,面向对象开发.
以前写C的程序,往往是顺序而过程的编程.像融入到代码中一样,不需要太多的思想.
然而在面向对象编程的时候,需要站在上帝视角上,俯瞰整个项目,着手一个对象模型的构造,在不断的构造对象的时候,实现封装.
===============
用纯代码的方式,实现这样一个小程序
第一步,图标放到Images.xcassets文件中就行了, 因为文件不是太大,不会影响内存的使用, 然后将图片的描述信息,放到Plist文件中,这也相当于实现了一次小封装.
将这些资源准备好, 就可以进行读取了.
从plist文件中就能看出,我们代码中是用一个NSArray 数组接收plist文件中的信息的.
@property (nonatomic, strong) NSArray *appInfos;
再为setter设计功能的时候有不同的方式,也体现了不同程度的封装.
1.我们的目的是从文件中读取相应的控件描述信息给appInfo, 那么我们就直接一点,直接将文件里面读取到的内容放到appinfo中咯
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"app" ofType:@"plist"];
_appInfos = [NSArray arrayWithContentsOfFile: path];
这样就OK了,但是这样在后续使用的时候, 很依赖该数组中具体封装的属性 "icon" , "name" 如果后期我在添加其他的属性,或者修改, 那么就需要到源码中不断修改.
因为我们需要不断使用 数组和字典的语法 给控件赋值 而他们的语法明显很依赖 属性
我们应该始终秉承着这样一个原则,我们所写的主代码就是客户, 而我们图片啊,控件啊,描述信息啊就是我们商品, 任由我们的商品配方如何变化,客户要做的就是消费我们的商品
而这具体消费也是我们提供给客户对这件商品的使用方法, 比如对这件商品 吃,喝, 踹等....当我们的配方变化了的时候,这一系列消费动作还是不变的.
比如,我们给客户提供了,对文件的读取,那么我们就仅仅 一个读取接口,对于接口中配方的变化,我们不让客户知道,客户就知道读取OK了行了.
2.