这样写 iOS 代码到底有问题吗,我总觉得有问题,难道是患上了强迫症?

2016-06-21 16:49:55 +08:00
 hyyy

经常重写 getter 方法,例如这样:

- (UITableView *)tableView {
    if (!_tableView) {
        _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight) style:UITableViewStyleGrouped];
        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        _tableView.delegate = self;
    }
    return _tableView;
}

我总觉得将 delegate 写在 getter 方法中是一种错误,但找不出理由来,各位大哥能不能告诉我到底对不对,证据在哪,不然我睡不着觉了。。。

4329 次点击
所在节点    程序员
32 条回复
ma125125t
2016-06-21 16:56:33 +08:00
程序上来说,没什么问题。只不过为什么要把初始化写在 getter 里?统一写在一个 setupUI 里不是更清晰吗?
lion9527
2016-06-21 16:57:21 +08:00
没什么不对啊。 delegate 跟初始化放一起很正常啊。
kidneyband
2016-06-21 17:00:29 +08:00
这样写显然对的,一方面一个控件的初始属性写在一起,分块看起来清晰,另一方面, lazyload, self.tableView 点出来的时候必定是有的,不必关系什么时候实例化的问题,再者你发现没有,你可以方便的跳到这个代码块。

至于缺点嘛,稍慢,但我觉得优点多。
kidneyband
2016-06-21 17:00:49 +08:00
不必关心
hyyy
2016-06-21 17:07:07 +08:00
难道大家都不觉得在 getter 中调用 self 会出问题,难道我真的有强迫症,完啦
hyyy
2016-06-21 17:08:18 +08:00
@lion9527
关键是这个 self 会不会出问题
kidneyband
2016-06-21 17:09:46 +08:00
@hyyy 你怀疑会不会出问题是你水平的问题,和这个代码没有关系。
finab
2016-06-21 17:09:52 +08:00
self 出什么问题? objc 的 getter 就是个普通方法。
a412739861
2016-06-21 17:14:06 +08:00
没什么问题吧,就是一般如果这个 tableview 是肯定用到的话,感觉这样会多写好几行。
一开始都这么写的,后来跟着以前代码直接_tableview=xxxx ,有点停不下来了都……

我有时候还把约束也写进去,还得先 addsubview ,那个是真有些别扭……
hyyy
2016-06-21 17:14:38 +08:00
@kidneyband
嗯嗯,说的对,我是对这个 delegate=self 真的不能忍,我总觉的这样写有问题,难道真的有强迫症了。。。
ma125125t
2016-06-21 17:19:08 +08:00
@finab 在 getter 中写 self.delegate 是会出问题的,但 self 写在右边不会出问题
hyyy
2016-06-21 17:22:34 +08:00
@ma125125t
说的靠谱,先👍个,为什么 self 放在左边会出问题呢?
loveuqian
2016-06-21 17:22:45 +08:00
我行首党都没说看到这代码有强迫症呢
kidneyband
2016-06-21 17:23:43 +08:00
@ma125125t 不会出问题,你怎么会认为会出问题呢,说有把握的话。
zylll520
2016-06-21 17:26:07 +08:00
@ma125125t 你确定吗 在 getter 方法中只有在还没赋值前调用其 getter 方法才会出问题 其他没有任何问题
ma125125t
2016-06-21 17:30:18 +08:00
@zylll520
@kidneyband 这里确实没问题,是我疏忽了。

@hyyy 我遗漏了上面那个判断,抱歉。如果没有那个判断,在 getter 里写 self.相当于递归了。
kidneyband
2016-06-21 17:31:33 +08:00
@ma125125t 还是不对
hyyy
2016-06-21 17:33:56 +08:00
@kidneyband
哪里不对
ma125125t
2016-06-21 17:42:09 +08:00
@kidneyband
@hyyy 确实不对,是 setter 才会有此问题。
finab
2016-06-21 17:54:20 +08:00
@ma125125t 有啥问题?只有在 set 或者 get 方法里调用自身才会有问题,例如这里的 getter 使用 self.tableView 才会出现问题。不明白你说的问题是什么问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/287334

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX