跟踪AppInfo代码
跟踪AppInfo代码
model 中的属性方法都是要共享的,所以写在.h文件中。
数据操作在model中完成.
程序运行开始的时候,先执行ViewController,它会对自已的进行成员初始化工作!在准备工作结束以后,便开始对其所管理的view进行加载操作,便到了viewDidLoad方法中去
当执行到这儿由于它对自身的成员NSArray *appList 进行了setter重写,所以就调用了该重写后的setter方法.
在该setter方法- (NSArray *)appList中,判断了如果_appList为空,就调用[AppInfoModel appInfoList]进行赋值。以便获得该AppInfoModel的模型数组。
这就跑到了类AppInfoModel中的去了。(Model层)
appInfoList的作用就是返回一个可变的数组,改数组的内容为自身的模型,这个模型包括name 和 icon两个属性。
当程序执行到这一步以后,Controller 已经从知本地的plist中提取出了数据,并且保存在一个名称为AppInfoModel的数组中了。
接着回到Controller的viewDidLoad方法中,
程序执行了AppInfoView *appView = [AppInfoView appInfoViewWithAppInfo:self.appList[i]]; (view层)
这一句传入了一个参数self.appList[i], 这个参数就是model, 它保存在appList数组中,由下标决定了这是一个在plist中存在的一个模型。 而该方法appInfoViewWithAppInfo: 很简单,功能是创建一个view,这个view中不仅包含了这个view中的子控件(一个label, 一个image, 一个button),还包含传入的model中的appInfo信息,并且保存在这个view的成员属性iconImage和nameLabel中去了。
执行到这一步,就已径加载完本地存放在plist文件中的数据和view,接下来就是把9个app view 排列了,并且添加到该控制器所管理的那个view中 。
接下来就是当用户点击下载按钮的时候,主屏幕会显示一个label提示正在下载,几秒后消失,这个就是B(Controller 所管理的view)想要监听A(appView),当A被点击后,B要添加那个label显示几秒中再消失。
所以用到代理模式,B为A的代理,当A被点击了,通知B自已被点击了,需要干些什么事。
controller中
appInfoView中
Controller中。
好了,这个程序的大致流程就是这样。