我不得不问这个,因为:我唯一认识到的是,如果断言失败,应用程序崩溃了.这就是使用NSAssert的原因吗?或者还有什么好处呢?将NSAssert放在我在代码中做出的任何假设之上是正确的,比如一个函数应该永远不会接收-1作为参数,但可能是-0.9或-1.1?
我经常在iOS代码中看到"断言",我谷歌它,并且知道它断言是真还是假.
我想知道这是否会在发布模式下自动禁用?
我在iPhone应用程序中使用NSAssert()调用,而我对Apple文档的理解是,如果定义了NS_BLOCK_ASSERTIONS,则断言不会编译到代码中.
要关闭断言,我在头文件中声明:#define NS_BLOCK_ASSERTIONS
但是,断言代码似乎仍在运行.
这里有什么我想念的吗?
谢谢
约翰
在Apple的并发编程指南中,NSOperation子类示例(非并发和并发变量)使用异常处理,我想知道为什么他们在操作中鼓励这种风格.
清单2-4响应取消请求
- (void)main {
@try {
BOOL isDone = NO;
while (![self isCancelled] && !isDone) {
// Do some work and set isDone to YES when finished
}
}
@catch(...) {
// Do not rethrow exceptions.
}
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,通常异常处理不是Objective-C代码中的常见做法 - 异常本质上是程序员错误,应该导致应用程序崩溃,而意外输入最好由NSError处理.(我可能误导理解来自之类的东西这个和这个)
我想知道NSOperations是否存在特殊情况,其中异常处理很重要,或者这是否是该指南的特定作者的首选样式.
作为旁注,一些NSOperation示例代码遵循此样式,其他示例则不遵循此样式.大多数高可见性OSS不使用例外(例如AFNetworking).
objective-c ×3
ios ×2
iphone ×2
xcode ×2
cocoa-touch ×1
debugging ×1
exception ×1
nsassert ×1
nsoperation ×1
uikit ×1