Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa/Objective-C数组越界问题_Cocoa - Fatal编程技术网

Cocoa/Objective-C数组越界问题

Cocoa/Objective-C数组越界问题,cocoa,Cocoa,我正在玩我编写的一个小Cocoa应用程序,其中我将类Person的对象添加到NSMutableArray。当我试图访问一个超出数组限制的对象时,我得到的只是控制台上的一条“beyond bounds”消息 事实上,我还以为会有更糟糕的事情发生。我以为应用程序会崩溃!但事实并非如此 我不确定这是好事还是坏事,但我想知道应用程序内部会发生什么来防止崩溃。我一直认为我在访问内存中不存在的对象。正常情况下,这会杀死每个应用程序 在您的情况下,实际上不允许您直接访问坏内存,因为您是通过NSArray对象进

我正在玩我编写的一个小Cocoa应用程序,其中我将类Person的对象添加到NSMutableArray。当我试图访问一个超出数组限制的对象时,我得到的只是控制台上的一条“beyond bounds”消息

事实上,我还以为会有更糟糕的事情发生。我以为应用程序会崩溃!但事实并非如此


我不确定这是好事还是坏事,但我想知道应用程序内部会发生什么来防止崩溃。我一直认为我在访问内存中不存在的对象。正常情况下,这会杀死每个应用程序

在您的情况下,实际上不允许您直接访问坏内存,因为您是通过NSArray对象进行接口的。相反,发生的情况是,您给对象一个错误的索引,它通过抛出异常来通知您

默认情况下,发生在NSApplication应用程序主线程上的异常不会导致应用程序终止。相反,它们记录错误并中止当前运行循环周期,然后开始下一个周期

有关如何在调试阶段处理这些异常的更多信息,请参阅。它描述了处理应用程序级异常时可以使用的各种技术和响应


此外,读取和写入坏内存并不总是导致应用程序崩溃,这就是为什么这些类型的错误很难跟踪的原因。相反,您可能只是在腐蚀其他对象,直到应用程序周期的后期才知道您已经这样做了。这里需要记住的重要一点是,NSApplication将挤压主线程上发生的大多数异常,因此您必须特别注意这一点。

在您的情况下,实际上不允许您直接访问坏内存,因为您是通过NSArray对象进行接口的。相反,发生的情况是,您给对象一个错误的索引,它通过抛出异常来通知您

默认情况下,发生在NSApplication应用程序主线程上的异常不会导致应用程序终止。相反,它们记录错误并中止当前运行循环周期,然后开始下一个周期

有关如何在调试阶段处理这些异常的更多信息,请参阅。它描述了处理应用程序级异常时可以使用的各种技术和响应

此外,读取和写入坏内存并不总是导致应用程序崩溃,这就是为什么这些类型的错误很难跟踪的原因。相反,您可能只是在腐蚀其他对象,直到应用程序周期的后期才知道您已经这样做了。这里需要记住的重要一点是,非应用程序将挤压主线程上发生的大多数异常,因此您必须特别注意这一点