当前位置: 代码迷 >> Iphone >> 匿名ios内存到底咋回事
  详细解决方案

匿名ios内存到底咋回事

热度:77   发布时间:2016-04-25 06:07:33.0
匿名ios内存到底怎么回事
//.h
@property (weak, nonatomic) IBOutlet UIImageView *picImageStage;
//.m
NSString *name = [NSString stringWithFormat:@"allen.png"];
UIImage *image = [UIImage imageNamed:name];
UIImageView *t = [[UIImageView alloc]initWithImage:image];
self.picImageStage = t; //正确

//将变量声明为 retain, 实现文件中去除临时变量。
//.h
@property (retain, nonatomic) IBOutlet UIImageView *picImageStage;
//.m
NSString *name = [NSString stringWithFormat:@"allen.png"];
UIImage *image = [UIImage imageNamed:name];
self.picImageStage = [[UIImageView alloc]initWithImage:image]; //正确

//.h
@property (weak, nonatomic) IBOutlet UIImageView *picImageStage;
//.m
NSString *name = [NSString stringWithFormat:@"allen.png"];
UIImage *image = [UIImage imageNamed:name];
self.picImageStage = [[UIImageView alloc]initWithImage:image]; //错误,为什么

------解决方案--------------------
我不知道你说的错误是运行错误还是编译错误?
但原因应该是这样的
第一中写法
UIImageView *t = [[UIImageView alloc]initWithImage:image];
self.picImageStage = t; //正确
虽然self.picImageStage是weak的也就是对t没有retain。但t自身没有释放,所以后续还可以操作,出了函数就不行了

第三种写法
self.picImageStage = [[UIImageView alloc]initWithImage:image]; //错误,为什么
没有变量承载[[UIImageView alloc]initWithImage:image],而self.picImageStage也没有对其Retain所以创建出来就接着销毁了。
所以赋值没有意义。
------解决方案--------------------
1.理解xib的含义。IBOutlet 关键字标示的xib中的控件。你既然在xib文件中声明了,为什么要重新构造UIImageView 。
2.weak和strong应该是ARC机制应用属性。如果用了arc的话retain就不能用了。
  相关解决方案