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

被折叠的 条评论
为什么被折叠?



