当前位置: 代码迷 >> VC/MFC >> 实现应用治理 (MVC ,xib,懒加载)
  详细解决方案

实现应用治理 (MVC ,xib,懒加载)

热度:122   发布时间:2016-05-02 03:36:40.0
实现应用管理 (MVC ,xib,懒加载)
  • Model类进行了数据的封装
    • .m文件里面
#import "ZYApp.h"@implementation ZYApp//封装数据 + (NSArray *)apps{ return  [NSArray arrayWithContentsOfFile: [[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil]];}@end

View界面类
View
在xib里面,我们存放了几个控件:
xib
当然我们这里面的控件,可以拖进行就行。

  • 但是连线的时候,必须要注意一点,选择你得这个xib属于哪个类来进行管理
    xib
  • 实现方式是将xib文件的class属性修改为当前自定义的appView类,这样xib文件的类型就是我们所自定义的appView类型,也就可以进行控件的连线了。
    在.h文件中:
#import <UIKit/UIKit.h>@interface ZYAppView : UIView+ (instancetype)appView;@property(nonatomic,strong)NSDictionary *dict;@end

.m文件中

#import "ZYAppView.h"@interface ZYAppView()@property (weak, nonatomic) IBOutlet UIImageView *iconVIew;@property (weak, nonatomic) IBOutlet UILabel *nameLbl;@end@implementation ZYAppView//类方法创建对象+ (instancetype)appView{  return   [[[NSBundle mainBundle]loadNibNamed:@"ZYAppView" owner:nil options:nil]lastObject];}//给子控件赋值- (void)setDict:(NSDictionary *)dict{    _dict = dict;    _iconVIew.image = [UIImage imageNamed:dict[@"icon"]];    _nameLbl.text = dict[@"name"];}@end
  • 这里一定要注意:使用loadNibNamed后面的参数,不能加后缀。
    在ViewController中

    • 实现懒加载:
@interface ViewController ()@property(nonatomic,strong)NSArray *apps;@end@implementation ViewController//懒加载- (NSArray *)apps{    if (_apps == nil)    {    _apps = [ZYApp apps];    }    return _apps;}

数据加载的方式:
1.开始就加载当前应用程序中需要的所有数据
- 占据内存空间,但是需要使用数据随时进行操作,效率高
2.需要使用的时候才进行加载
- 节省内存空间,但是需要使用数据的时候需要重新进行数据的获取,效率降低——懒加载——延迟加载
- 实现方式:
- 重写对象的getter方法,因为使用一个对象的时候需要调用

- (void)viewDidLoad {    [super viewDidLoad];    CGFloat padding = 20;    CGFloat appViewWidth = 100;    CGFloat appViewHight = 105;    for (int i = 0 ; i<self.apps.count; i++)    {        CGFloat appViewX = padding + (padding + appViewWidth) * (i %col);        CGFloat appViewY = padding + (padding + appViewHight) * (i / col);        //创建子类appView        ZYAppView *appView = [ZYAppView appView];        //设置子类frame值        appView.frame = CGRectMake(appViewX, appViewY, appView.frame.size.width, appView.frame.size.height);        //给子类得控件 赋值        appView.dict = self.apps[i];        [self.view addSubview:appView];    }}@end

使用MVC的好处在于,分工合作,各司其职,好处多多。

效果图:
效果图

  • 注意事项:
    1. 通过自定义的appView返回的view不再是UIView类型,而是自定义类的类型
    2. 控件器只做两个事件:获取view 赋值
    3. 子控件的连线可 在类扩展中实现,这样更安全
    4. 使用自定义的类描述xib文件,一定要将xib文件的class属性修改为自定义的类,否则不能进行连线。

版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案