objective-c – 为什么[foo view]的行为与我的代码中的foo.view不同?

前端之家收集整理的这篇文章主要介绍了objective-c – 为什么[foo view]的行为与我的代码中的foo.view不同?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
纯粹是偶然的,我发现调用[bar.view addSubview:[foo view]]不起作用,但是[bar.view addSubview:foo.view]在下面的代码中做了.
foo=[fooViewController alloc] initWithNibName:@"fooViewController" andBundle:nil];
[self.view addSubview:foo.view];//here's where I swap the two commands out
[foo aFunctionThatSendsAMessageToOneOfFoosSubViews];

(最后一行是因为foo有一些子视图需要在运行之前设置 – 特别是UIWebView.如果在发送消息之前没有实例化它们,那么消息最终会变为零. FOO).

我认为这两个在功能上是相同的 – foo.view调用[foo view]所做的相同的getter,但实际上并非如此;点语法获得所需的结果,而使用括号将消息发送到nil.

如果你十分钟前问过我,我会告诉你两个表达式之间的区别是’语法,而不是别的’.鉴于我显然是错的,我需要了解我是怎么做错的,或者我会再次绊倒它.

解决方法

它们在功能上是等价的.我认为这是竞争条件.当您第一次在该代码调用foo.view时,视图尚未加载,并且调用将发送到[foo loadView].在调用[foo viewDidLoad]或foo.isViewLoaded == YES之前,您无法确定视图是否已加载.

您需要等待确保在执行任何依赖它的操作之前加载视图,例如[foo aFunctionThatSendsAMessageToOneOfFoosSubViews].

在您目前的情况下,有时它会及时加载,有时则不加载.

猜你在找的C&C++相关文章