iOS开发脚踏实地学习day02-图片查看器和TOM猫

本文深入探讨了Objective-C中self.XX和_XX的使用场景,包括它们在属性访问、懒加载、图像实例化、动画清理等方面的应用,并提供了优化内存消耗的策略。


1、在.m文件中使用self.XX和_XX有什么区别?

在用懒加载,使用getter,让对象在最需要的时候创建时,用_XX实现不了,一定要用self.XX才可以。

前者调用该类的setter或getter方法,后者直接获取自己的实例变量。

property 和 instance variable 是有区别的。

前者声明后,如果没有readonly修饰的话,该类获得两个方法,一个是setter和getter。property声明后,该类会获得一个同名但前面多了一个下划线的实例变量。setter和getter是

访问这个实例变量的方法。

在类的m文件里可以直接用实例变量名来访问自身的实例变量,但是setter和getter方法不会被调用。外部想用该类的实例变量需要用getter和setter方法。 


2、使用plist得到图片数组

//懒加载,通过getter实现
//效果是让对象在最需要的时候才创建!(self.XX才可以,_XX不可以)
-(NSArray *)imageList
{
    NSLog(@"数组");
    if (_imageList == nil) {
        NSLog(@"创建数组");
        //方法一
//        NSDictionary *dic1 = @{@"name":@"biaoqingdi",@"desc":@"表情帝"};
//        NSDictionary *dic2 = @{@"name":@"bingli",@"desc":@"病例"};
//        NSDictionary *dic3 = @{@"name":@"chiniupa",@"desc":@"吃牛排"};
//        NSDictionary *dic4 = @{@"name":@"danteng",@"desc":@"蛋疼"};
//        NSDictionary *dic5 = @{@"name":@"wangba",@"desc":@"王八"};
//        _imageList = @[dic1,dic2,dic3,dic4,dic5];
        
        //方法二.使用plist文件
        NSString *path = [[NSBundle mainBundle] pathForResource:@"ImageList" ofType:@"plist"];
        /*路径
         /Users/cuihao/Library/Developer/CoreSimulator/Devices/4FA00AC2-1556-4C61-80EE-A098690E8C1E/data/Containers/Bundle/Application/430FCA26-BACF-4336-97E2-030B706F0C15/04-图片查看器.app
         */
        NSLog(@"%@",path);
        //在OC中ContentOfFile,通常需要完整的路径
        _imageList = [NSArray arrayWithContentsOfFile:path];
    }
    return _imageList;
}

3、strong weak assign和retain

http://lizhuang.iteye.com/blog/1989337

http://www.cnblogs.com/macroxu-1982/archive/2013/05/05/3061638.html

控件:如果用storybord拖线,控件用weak;如果用代码创建界面,控件可以共用strong

自定义对象,需要使用strong

NSString,使用copy

数字型的,使用assign


4、Thread1:EXC_BAD_ACCESS错误

是因为试图访问一个不存在的对象的时候会报此错误,一般情况下是过度release,对象被提早释放了。

检查属性是不是strong


5、关于TOM猫的内存优化


没有用优化时,这APP占用内存200M以上,而且每次内存使用是累加的;采用以下方法后,APP的内存占用在几十M,每次点击按钮,动作结束后恢复几十M,内存占用不会累加

,如下图曲线,没有动作时都是保持在20MB左右的。


优化一:图像的实例化方法

//关于图像的实例化
/*
imageNamed:系统推荐使用,但是图像实例化之后的释放由系统负责
如果要自己释放图片,就不能使用imageNamed方法
而需要使用imageWithContentOfFile,(建议用在数量多,文件大,用的次数少的图片)
提示:如果放在Images.xcassets中的图片(常用小的,不要存放大的、不常用的图片),不能使用imageWithContentOfFile
*/

//        //TOM优化一:用这种方法,文件名是区分大小写的,ConternsOfFile需要全路径
        NSString *path = [[NSBundle mainBundle] pathForResource:imageNamed ofType:nil]; 
        UIImage *image = [UIImage imageWithContentsOfFile:path];
        
        //用imageNamed方法,文件名是不区分大小写的
//      UIImage *image = [UIImage imageNamed:imageNamed];
优化二:动画结束后,清理动画数组

 //TOM优化二:动画结束之后,清理动画数组
    //performSelector定义在NSObject分类中
    [self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.tom.animationDuration];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值