C. *_*ung 1 logging multithreading ios
我正在为iOS应用程序实现文件记录器.记录器是一个单例,它有一个成员变量dispatch_queue_t _queue负责将日志输出到文件,这样它可以确保线程安全,并且在写入日志时不会阻塞主线程或其他线程.
由于block没有参数,所以我不能va_start在块内做.在那种情况下,我必须message在块外面初始化.我对iOS中的块很新,不知道我应该在哪里发布message(at (1)或者(2),为什么?)
谢谢!
- (void)log:(NSString *)format, ...
{
va_list args;
va_start(args, format);
NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
dispatch_async(_queue, ^{
// output `message` to file
// (1) release here?
[message release];
});
// (2) or release here?
[message release];
va_end(args);
}
Run Code Online (Sandbox Code Playgroud)
封闭词法范围本地的堆栈(非静态)变量被捕获为const变量.它们的值是在程序中的块表达点处获取的.在嵌套块中,从最近的封闭范围捕获值.
无需担心在块内释放消息.你可以安全地在街区外面释放它.
理想情况下,您只需转换为ARC而不用担心它.