关于ios5的值传递(IB相关)

在之前的ios4的项目中,习惯性的使用值传递方法是,创建一个对象,然后直接对对象的变量赋值这种方法。


PhotoReviewViewController *photoReviewViewController = [[PhotoReviewViewController alloc] initWithNibName:@"PhotoReviewViewController" bundle:nil];
photoReviewViewController.imageView.image = image;

上面例子中的imageView是一个IBOutlet属性的变量。

然而在ios5中,运行程序,却看不到这个image了。编译器没有任何报错警告,但是界面上一直是黑的,感觉明显没有赋值成功。

于是修改了代码。

增加了一个,

@property (nonatomic, retain) UIImage *tmpImage;
再将赋值的方法修改了

photoReviewViewController.tmpImage = image;
再在
photoReviewViewController.imageView.image = tmpImage;
类里面将tmpImage的值赋值给imageView,图片终于得以显示。


考虑了一下,ios5这样的升级的用意,在程序在遇到内存警报的时候,首先会释放IB资源的内存,再进行界面的重绘。如果是直接赋值到IB变量上,在重绘的时候,这个IB变量肯定为nil值,那是无法现实界面。反而如果将image放到tmpImage上,再重绘界面时,这个image数据还是保存在内存中。


深入的去思考一下,这种赋值的方法其实并不科学,对于ios来说,不同view之间的值传递,还是应该应用回调,委托,通知,文件系统来完成,虽然操作会复杂一些,但是在程序的安全性和强壮性上来看,要比直接的内存中的数据指针操作来的安全许多。



你可能感兴趣的:(关于ios5的值传递(IB相关))