基本目标C语法

时间:2016-06-18 09:53:08

标签: ios objective-c uiwebview

我正在学习iOS开发。在setter方法中,我不知道语法及其功能。

-(void)setURL:(NSURL *)URL
{
  _URL = URL;
  if(_URL) {
     NSURLRequest *req = NSURLRequest requestWithURL:_URL];
     [(UIWebView *)self.view loadRequest:req];
      }
}

所有我不明白的是那条线:

[(UIWebView *)self.view loadRequest:req];

这是我第一次遇到这种情况:将self指示为UIWebView实例的指针?或者指示self.view作为UIWebView实例的指针?如果是后者,那就很有道理了。在我的应用程序中,self是UIViewController的一个实例,它的view属性是一个UIWebView。但是添加它有什么意义呢?为什么不使用self.view呢?谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

当您看到一个表达式执行多个没有明确顺序的操作时,最好使用operator precedence table进行检查。

(UIWebView *)self.view组件有两个操作 - 点.运算符和类型转换。根据该表,点运算符具有最高优先级,因此首先评估self.view。类型广播的优先级较低,因此self.view的结果会在拨打电话之前投放到(UIWebView*)

答案 1 :(得分:2)

它手动告诉编译器self.view类型为UIWebView * - 这称为类型转换。 UIViewController的{​​{1}}属性定义为view。这个类没有任何方法UIView *,所以如果你试图在没有将对象强制转换为loadRequest:的情况下调用它,那么编译器会警告你你似乎做错了什么。< / p>