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

  • Model类进行了数据的封装
    • .m文件里面
#import "ZYApp.h"

@implementation ZYApp
//封装数据
 + (NSArray *)apps
{
 return  [NSArray arrayWithContentsOfFile: [[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil]];
}
@end

View界面类
实现应用管理 (MVC ,xib,懒加载)_第1张图片
在xib里面,我们存放了几个控件:
实现应用管理 (MVC ,xib,懒加载)_第2张图片
当然我们这里面的控件,可以拖进行就行。

  • 但是连线的时候,必须要注意一点,选择你得这个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的好处在于,分工合作,各司其职,好处多多。

效果图:
实现应用管理 (MVC ,xib,懒加载)_第3张图片

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

你可能感兴趣的:(mvc)