通常的做法可能是在应用程序开发期间将断言放入代码中以检查输入参数,数据完整性等.
我测试我的应用程序,但是,鉴于我不是Knuth(并且他写了1美元的支票),而且我不能像一些医疗和太空系统软件公司那样雇用一支庞大的全职QA团队,我假设所有应用程序总是会有大量的错误,这些错误在测试或质量检查期间从未见过.假设在其他方面似乎非常不诚实.因此,在测试应用程序(显然删除导致任何先前看到的ASSERT失败的所有错误)并准备好将应用程序发送给Apple之后,应该如何处理发布/分发版本中的所有ASSERT检查?请假或禁止?
这里有一个理由让他们离开:如果一个应用程序对某些用户来说很不稳定,那么该应用程序可能会被这些用户评为1星级,而没有人告诉开发人员为什么足够详细.但是如果应用程序因ASSERT故障而崩溃,那么应用程序可能仍然会被评为1星级,但是如果有足够多的用户选择进入,开发人员可能通过iTunes和iTunes Connect间接获得一些故障转储,以找出问题所在.如果苹果公司因全新的ASSERT崩溃而被Apple拒绝,这将阻止该应用程序的恶劣版本进入客户的设备.
在C和C++中,空指针取消引用是未定义的行为.Objective-C怎么样?
换句话说,这个代码保证做什么?
*(long*)0 = 0;
Run Code Online (Sandbox Code Playgroud)
背景:我想知道这个答案是否可能触发未定义的行为,可能导致随机的事情,比如语句被优化,甚至更奇怪.
当然,我不认可这样做.不过,了解语言规则很重要.