iOS UIView & 懒加载 & 字典转模型

156 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

UIView的常见属性

@property (nonatomic) CGRect frame;
控件矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)

@property (nonatomic) CGRect bounds;
控件矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的 x,y 一般为0@property (nonatomic) CGPoint center;
控件中点的位置(以父控件的左上角为坐标原点)

图片的两种加载方式:

1> imageNamed:
   a. 就算指向它的指针被销毁,该资源也不会被从内存中干掉
   b. 放到Assets.xcassets的图片,默认就有缓存
   c. 图片经常被使用
   
2> imageWithContentOfFilea. 指向它的指针被销毁,该资源会被从内存中干掉
   b. 放到项目中的图片就没有缓存
   c. 不经常用,大批量的图片

懒加载

@property (nonatomic, strong) NSArray *dataArr;

// 懒加载
1. 用到的时候再加载
2. 全局只会被加载一次
3. 全局都可以使用

- (NSArray *)dataArr{
    if(_dataArr == nil){
        self.dataArr = @[
            @{
                @"name":@"ddd"
             },
              @{
                @"name":@"ddd"
             }
        ];
    }
    retrun _dataArr;

}

plist文件

直接将数据直接写在代码里,不是一种合理的做法,如果数据经常改,就要经常翻开对应的代码进行修改。造成代码扩展性低 因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据,如果要变动数据,直接修改数据文件即可,不用修改代码 一般可以使用属性列表文件存储NSArray 和 NSDictionary 之类的数据,这种,属性列表文件,的扩展名是 plist,因此也称为 plist 文件。

NSArray *names = @[@"18",@"30"];
BOOL flag = [names writeToFile:@"/dd/name.plist"  atomically:YES];

if (flag){
    NSLog(@"写入成功");    
}

解析plist文件

获得plist文件的全路径
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"shop" ofType:@"plist"];

// 加载plist文件
_shop = [NSArray arrayWithContentsOfFile:path];

字典转模型


@interface DDShop: NSObject

@property (nonatomic, copy) NSString *icon;

@property (nonatomic, copy) NSString *name;

//- (instancetype)initWithIcon:(NSString *)icon name:(NSString *)name;

//+ (instancetype)shopWithIcon:(NSString *)icon name:(NSString *)name;

- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)shopWithDict:(NSDictionary *)dict;



@end



@implementation DDShop

- (instancetype)initWithIcon:(NSString *)icon name:(NSString *)name{
    if(self = [super init]) {
        self.icon = icon;
        self.name = name;
    }
    return self;
}

+ (instancetype)shopWithIcon:(NSString *)icon name:(NSString *)name{
    return [[self alloc] initWithIcon:icon name:name];
}

- (instancetype)initWithDict:(NSDictionary *)dict{
    if(self = [super init]) {
        self.icon = dict[@"icon"];
        self.name = dict[@"name"];
    }
    return self;
}
+ (instancetype)shopWithDict:(NSDictionary *)dict{
    return [[self alloc] initWithDict:dict];
}


@end



- (NSArray *)dataArr{
    if(_dataArr == nil){
        NSBundle *bundle = [NSBundle mainBundle];
        NSString *path = [bundle pathForResource:@"shop" ofType:@"plist"];

        // 加载plist文件
        self.dataArr = [NSArray arrayWithContentsOfFile:path];

        NSMutableArray *tempArray = [NSMutableArray array];
        for (NSDictionary *dict in self.dataArr){
            DDShop *shop = [DDShop shopWithDict:dict];
            [tempArray addObject:shop];
        }

        self.dataArr = tempArray;
    }
    retrun _dataArr;
}