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)
它破坏了封装; 如果调用者传递了对iVar插槽的引用,该怎么办?现在你有被调用者管理调用者内存,这是一种可怕的做法,很可能是崩溃的(例如,面对并发).
如果aWebView是NULL,它会崩溃; 特别是在任务上崩溃了.
如果aWebView指的是iVar插槽,它会绕过任何可能的属性使用(打破封装的不同方式).
| 归档时间: |
|
| 查看次数: |
1946 次 |
| 最近记录: |