如何在Objective c中使用指针

sam*_*mir 4 pointers objective-c ios

我见过一些iOS开发人员使用这样的代码:

- (void)setupWebView:(UIWebView**)aWebView {
 UIWebView *webview = [[UIWebView alloc] init];
.....

 if (*aWebView) {
        [*aWebView release];
    }

    *aWebView = webview;
}
Run Code Online (Sandbox Code Playgroud)

你知道这是什么意思,为什么我们用它?谢谢

bbu*_*bum 41

- (void)setupWebView:(UIWebView**)aWebView {
Run Code Online (Sandbox Code Playgroud)

那太糟糕了.您永远不应该有一个返回void的方法,但是通过引用设置一个参数,除非:

•有多个参数集

•该方法带有前缀 get

该方法应该直接返回创建的实例.而这只会使情况变得更糟 - 是错误的:

 if (*aWebView) {
    [*aWebView release];
 }

 *aWebView = webview;
Run Code Online (Sandbox Code Playgroud)
  1. 它破坏了封装; 如果调用者传递了对iVar插槽的引用,该怎么办?现在你有被调用者管理调用者内存,这是一种可怕的做法,很可能是崩溃的(例如,面对并发).

  2. 如果aWebView是NULL,它会崩溃; 特别是在任务上崩溃了.

  3. 如果aWebView指的是iVar插槽,它会绕过任何可能的属性使用(打破封装的不同方式).