我见过一些 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;
它破坏了封装;如果调用者传递了对 iVar 槽的引用怎么办。现在你让被调用者管理调用者的内存,这是一种可怕的做法,而且很可能会崩溃(例如,面对并发)。
如果
aWebView
为 NULL,它会崩溃;特别是在作业上崩溃。如果
aWebView
引用 iVar 插槽,它会绕过任何可能的属性使用(一种不同的破坏封装的方式)。
关于objective-c - 如何在 Objective C 中使用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11020164/