这个问题很容易解释,但对我来说很难解决。我有一个从未初始化的属性。
首先,我使用 iCarousel 自定义类来为我的应用显示一些图像。在它的一种委托方法(它用来知道哪个视图将在某个索引处显示的方法)中,我使用以下代码:
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
if(!view)
{
CustomController* controller = [self.storyboard instantiateViewControllerWithIdentifier: "identifier"];
//BTW, the CustomController is initialized properly. Its instance is not nil after the initialization.
controller.imageView.image = [UIImage imageNamed: "something.png"];
view = controller.view;
}
return view;
}
如您所见,我在轮播中显示的视图是具有自己的控制器的自定义视图。我使用 storyboard 方法初始化它,然后我只是在我的 imageView 属性中设置图像,很明显,这是一个 UIImageView。
不要兴奋地说我没有初始化我的 imageView,因为我的“CustomController”类中有一个自定义 getter。像这样:
//接口(.h)
...
@property (nonatomic, strong) UIImageView* imageView;
...
//实现(.m)
...
@synthesize imageView = _imageView;
...
- (UIImageView*) imageView
{
if(!_imageView)
_imageView = [[UIImageView alloc] init];
return _imageView;
}
...
信不信由你,即使我在“_imageView = [[UIImageVIew alloc] init];”中放了一个断点......程序执行该行但_imageView仍然为零。为什么?
我不想知道“如何设置我的属性”,所以请不要为此提供解决方法......我想知道的是“为什么我的属性从未设置并且始终保持为零”,我在做什么错误的?。
我也尝试将我的 imageView 用作 IBOutlet ......但即使我将它链接到 Interface Builder 中的 imageView 并在“viewDidLoad”之后检查它的值,它仍然保持为零。
PS:顺便说一句,我正在使用 ARC(是的,我知道在标题中...... xD)