【发布时间】:2023-03-22 17:32:02
【问题描述】:
在我的第一个视图控制器中,我有一个在实现文件中合成的 UIImage 属性。在推送的第二个视图控制器中,我在那里创建了一个 UIImage 对象,同时将它设置为第一个视图控制器的 UIImage 属性。最后,我解散了第二个视图控制器。但是,在关闭视图控制器后,图像似乎没有保存。我的理解是,由于 UIImage 是一个指针,因此数据传递是通过引用进行的,并且由于控制器被解除,所以 UIImage 也是如此。这是正确的,有没有更好的方法来完成这项任务?供您参考,我使用的是 ARC。
在第一个视图控制器(firstVC)中,
@property (strong, nonatomic) UIImage *image;
在第二个视图控制器中,
[firstVC setImage:self.ivarUIImageView.image];
其中 ivarUIImageVIew 定义为:
@property (strong, nonatomic) IBOutlet UIImageView *ivarUIImageView;
现在让我们在第三个视图控制器中说,我在 viewDidLoad 方法中:
imgView = [[UIImageView alloc] initWithImage:firstVC.image];
其中imgView定义为:
@property (strong, nonatomic) IBOutlet UIImageView *imgView;
【问题讨论】:
-
在你的第三个VC中,你如何定义firstVC?如果你记录 firstVC(在第三个 VC 的 viewDidLoad 中),它是 nil 吗?
-
如果你只是想处理同一张图片,为什么不把它放在一个单例类中(例如AppDelegate)?
-
你在这里做什么真的不清楚。在第二个视图控制器中,您在 firstVC 上调用 setImage —— firstVC 是什么?指向第一个视图控制器的指针?图像视图?在第三个视图控制器中,你说你有一个 IBOutlet imgView,但是你分配初始化它——如果它是 IB 中图像视图的出口,你不想这样做。
-
@rdelmar 很抱歉。 firstVC 实际上是指向第一个视图控制器的指针。事实证明图像没有显示,因为我在它是一个出口时分配并初始化它。所以如果我已经通过 IB 实现了,就不需要分配和初始化了吗?另外,Obj-C 是否通过引用/指针传递 UIImage?
-
是的,您不想分配初始化一个您在 IB 中有出口的对象——这会创建一个不同的实例,这不是您想要的。是的,对象是通过引用传递的。
标签: ios objective-c ios6 uiimage