Xcode,为什么控制台中省略了一些NSLog条目?

Way*_*e3d 3 console xcode objective-c nslog

我刚开始学习IOS开发.每次运行此程序时,控制台都不会始终显示我的NSLog.

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        NSMutableArray *items = [[NSMutableArray alloc] init];

        [items addObject:@"One"];
        [items addObject:@"Two"];
        [items addObject:@"Three"];

        [items insertObject:@"zero" atIndex:0];

        NSLog(@"Object at 0 is %@", [items objectAtIndex:0]);
        NSLog(@"Object at 1 is %@", [items objectAtIndex:1]);
        NSLog(@"Object at 2 is %@", [items objectAtIndex:2]);
        NSLog(@"Object at 3 is %@", [items objectAtIndex:3]);

        for (int i = 0; i < [items count]; i++) {
            NSLog(@"%@", [items objectAtIndex:i]);
        }
        items = nil;           
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我每次运行时都应该在控制台中获取它:

2012-04-11 16:29:10.419 RandomPossessions[701:403] Object at 0 is zero
2012-04-11 16:29:10.421 RandomPossessions[701:403] Object at 1 is One
2012-04-11 16:29:10.422 RandomPossessions[701:403] Object at 2 is Two
2012-04-11 16:29:10.422 RandomPossessions[701:403] Object at 3 is Three
2012-04-11 16:29:10.423 RandomPossessions[701:403] zero
2012-04-11 16:29:10.423 RandomPossessions[701:403] One
2012-04-11 16:29:10.424 RandomPossessions[701:403] Two
2012-04-11 16:29:10.424 RandomPossessions[701:403] Three
Run Code Online (Sandbox Code Playgroud)

但有时它并不是全部显示出来的.另一次我运行它,我可以得到:

2012-04-11 16:48:20.626 RandomPossessions[734:403] Object at 0 is zero
2012-04-11 16:48:20.628 RandomPossessions[734:403] Object at 1 is One
Run Code Online (Sandbox Code Playgroud)

我必须多次运行程序才能获得要输出到控制台的NSLog的完整列表.这是一个错误,还是我做错了什么?谢谢

小智 5

迷人.我只是尝试了你的代码并获得了相同的结果.这是我的假设:

在你的行设置一个断点:

    [items insertObject:@"zero" atIndex:0];
Run Code Online (Sandbox Code Playgroud)

当调试器到达时,调试面板显示一个线程.

现在前进到

    NSLog(@"Object at 1 is %@", [items objectAtIndex:1]);
Run Code Online (Sandbox Code Playgroud)

现在有3个主题.

我打赌其他2个线程正在对日志进行实际写入.如果程序在这些单独的线程写入日志之前完成,那么它们就会被杀死,并且您的日志不会被写入.

我试过添加一个电话

sleep(0);
Run Code Online (Sandbox Code Playgroud)

在主要功能结束时,突然开始正常显示日志.

然后我尝试删除该行,原来的症状消失了,我再也无法重新创建你遇到的问题了.

一句话:我认为这是在编写日志之前程序退出的症状.如果您正在编写iOS应用程序,则无需担心此类问题.这只是一个模糊的实现细节.

祝你好运学习.