可可坏习惯

sch*_*hwa 28 macos cocoa objective-c

自从你开始使用Cocoa进行编码后,你开发的那些坏习惯是什么?

我认为制定一个坏习惯列表并积极地添加它,更重要的是,打破这些习惯是产生代码质量的好方法.所以从现在开始,让你的坏习惯脱离你的胸膛.也许其他人分享你的坏习惯.

lfa*_*lin 21

传递NULL给需要的论点NSError**,纯粹的懒惰.

  • 你是对的,`nil`是对象.应该是`NULL`而不是. (6认同)

Dav*_*bin 14

没有足够的单元测试.如果没有单元测试,那么清理和重构代码真的很困难.没有不断的重构和清理,代码腐烂开始进入并传播.

使用单例模式共享对象,例如+ [MyObject defaultObject].这本质上是一个全局变量,它可以产生一些很好的隐藏依赖关系和耦合.反过来,这会使代码更难以测试.

  • -1因为这些都是任何OO语言的问题. (2认同)
  • 任何更好的替代解决方案,而不是单身? (2认同)

mma*_*alc 11

使用控制流的异常

(和其他非特殊情况.)

由于异常的使用在这里得到了另一个答案,并且评论中提到的文档并没有特别强调这一点,因此值得强调的是,异常不应该用于正常的控制流程(在一些其他环境中很常见).可可的例外情况相对非常昂贵.如果要传达错误,请使用Cocoa提供的NSError对象和错误处理体系结构.不要抛出异常.

  • 错字颠倒了意义.而不是"现在应该使用例外",我认为它应该是"不应该使用**的例外". (4认同)

sch*_*hwa 7

这是我的一些:

投掷异常而不试图抓住他们.我开始越来越多地依赖NSError来防止NSExceptions在John Woo电影中像子弹一样飞行,但我仍然有很多特殊的代码.

写一个快速课程来做X,Y和Z然后忘记在dealloc中清理.泄漏啊!

直接在各个地方使用字符串(KVO)而不是定义常量并使用它(有关更多信息,请参阅Dave Dribin 关于KVO 的优秀博客文章)

  • 我真正喜欢Cocoa设计的一件事是,NSExceptions被定义为仅用于程序员错误(如越界索引),而NSError将用于运行时错误.自从我意识到这一点后,我觉得使用NSException要少得多. (2认同)

Jab*_*air 7

我对在类中使用访问器感到懒惰.通常,最大的问题是我无法轻易地快速了解变量的范围.然后我上周花了几个小时来调试因使用而导致的内存损坏问题

self.displayName = name
Run Code Online (Sandbox Code Playgroud)

在某些地方和

displayName = name
Run Code Online (Sandbox Code Playgroud)

在其他人.当我发现它并且我的应用程序停止崩溃时,我很高兴.我不是很高兴我浪费了几个小时寻找这样一个可以避免的错误.

  • 如果像许多人建议你不应该这样,你可以避免使用@synthesize displayName = _displayName,然后永远不要使用_displayName.这是一种代码嗅觉策略. (5认同)

Ben*_*ieb 5

我经常使用#defines,我应该使用const声明.

另外,我可能会在我转发的NSNotifications中过于多产; 脱钩运行!


Jef*_*eff 5

坏习惯:保持我的Java心态.

我的Java背景导致我甚至在考虑使用变量做任何事情之前都要经常检查null,当我可以利用Objective-C的能力向nil发送消息时.(参见:"发送消息为零?")

我必须提醒自己,Objective-C允许我简单地编写优雅地使用返回值0或nil的代码,而不是尝试先发制人地获取nil.