首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Iphone >

匿名ios内存到底咋回事

2013-01-11 
匿名ios内存到底怎么回事//.h@property (weak, nonatomic) IBOutlet UIImageView *picImageStage//.mNSSt

匿名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就不能用了。

热点排行