big*_*g_m 10 iphone setter memory-management properties objective-c
假设您有一个具有复制语义的属性.如果复制方法失败,你应该在setter中做什么?(我认为这是一种可能性,因为副本通常以alloc/init组合开始,它可能会失败并返回nil.)Apple建议返回错误代码而不是使用异常,但是setter通常具有void返回类型.推荐的方法是什么?你如何表明发生了错误?
Apple的建议实际上是应该为特殊情况保留例外情况.无论如何,这有时是一种推荐的编程实践,但是由于异常处理的成本较高,Objective-C的情况得到了加强.
因此,如果您愿意,可以抛出异常并且它是合适的,例如,内存不足(复制失败)(希望!)异常.
也就是说,一些编程实践也建议属性不应该抛出异常; 通常基于obj.property = value;如果抛出异常而看起来像赋值的东西会混淆(不像[obj setProperty:value]).
所以这让我们将该属性设置为"零"的类型(nil,0,0.0,NO等).
返回错误记录详细信息的详细信息,可在检测到"零"后查询.这基本上是底层("Unix")系统调用所使用的方法,并且errno在返回"零"之前设置了许多库函数.