【发布时间】:2015-03-13 11:36:44
【问题描述】:
如果我讨厌一件事,那就是在没有完全理解其背后的逻辑的情况下,就这样走了,所以....我偶然发现了这个表达:
MSClient *client = [(AppDelegate *) [[UIApplication sharedApplication] delegate] client];
我实际上一直使用点语法来编写对变量的访问,并且仅将硬括号用于方法调用,但我想这只是喜欢的任何一种。我的困惑在于我通常会这样写:
MSClient *client = ((AppDelegate *) [[UIApplication sharedApplication] delegate]).client;
因为这行不通:
MSClient *client = (AppDelegate *) [[UIApplication sharedApplication] delegate].client;
由于演员表没有应用于正确的对象,我想知道第一个书面表达式如何顺利编译而没有任何错误,因为在我看来,演员表没有括在括号中,并且适用于“委托”;它应用最外面的硬括号,删除“。”并删除使第 3 个表达式起作用的括号,而第 2 个则不起作用。
唷,很抱歉就这么简单的事情发表了长篇文章。但同样,我讨厌在没有完全理解的情况下顺其自然。
谢谢!
【问题讨论】:
-
将
[[UIApplication sharedApplication] delegate]视为X,那么该表达式将类似于[(AppDelegate *)X client];而不是(AppDelegate *)[X client]; -
是的,但是在第二个表达式中,没有额外的 (......delegate]) 时出现错误。 ;如果没有额外的 () 仍然会给 (AppDelegate *)X.client = [(AppDelegate *)X client];对吗?
标签: ios objective-c