objective-c - 如何在 Objective C 中使用指针

标签 objective-c ios pointers

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

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

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

    *aWebView = webview;
}

您知道这是什么意思以及我们为什么使用它吗?谢谢

最佳答案

- (void)setupWebView:(UIWebView**)aWebView {

太可怕了。你不应该永远有一个方法返回 void,但通过引用设置一个参数,除非:

• 设置了多个参数

• 方法以get为前缀

该方法应该直接返回创建的实例。这只会让事情变得更糟——这是完全错误的:

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

 *aWebView = webview;
  1. 它破坏了封装;如果调用者传递了对 iVar 槽的引用怎么办。现在你让被调用者管理调用者的内存,这是一种可怕的做法,而且很可能会崩溃(例如,面对并发)。

  2. 如果 aWebView 为 NULL,它会崩溃;特别是在作业上崩溃。

  3. 如果 aWebView 引用 iVar 插槽,它会绕过任何可能的属性使用(一种不同的破坏封装的方式)。

关于objective-c - 如何在 Objective C 中使用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11020164/

相关文章:

objective-c - 在 Objective-C 编程中具有单个键的 NSMutableDictionary 包含多个值

ios - UIBezierPath - 什么是单位半径

ios - SwiftUI 中的双向无限 PageView

ios - CollectionView Cell 滑动执行操作

ios - iOS 中的应用内购买用途

objective-c - 从 Objective-C 代码调用时,Xcode 调试器无法显示 [AnyObject] 数组的值

objective-c - 开始工作表 : block alternative with ARC?

c++ - 我如何检查指针是否在 C++ 中被删除

将字符串复制到指针似乎不起作用

c++ - 视觉 C++ 2008 : debugging data behind pointer array