Tôi đã đọc nhiều bài đăng về NSRunLoop
, như this, this, this. Nhưng không thể tìm ra những gì thực sự làm NSRunLoop
NSRunLoop làm gì?
Những gì tôi thường thấy là một sợi công nhân
wthread = [[NSThread alloc] initWithTarget:self selector:@selector(threadProc) object:nil];
[wthread start];
với một NSRunLoop bên trong nó
- (void)threadProc
{
NSAutoreleasePool* pool1 = [[NSAutoreleasePool alloc] init];
BOOL isStopped = NO;
NSRunLoop *runloop = [NSRunLoop currentRunLoop];
[runloop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
while (!isStopped)
{
{
NSAutoreleasePool* pool2 = [[NSAutoreleasePool alloc] init];
[runloop runMode:NSDefaultRunLoopMode
beforeDate:[NSDate distantFuture]];
[pool2 release];
}
}
[pool1 release];
}
Và các chủ đề chính đi một số công việc này wthread
[self performSelector:@selector(someWork:) onThread:wthread withObject:nil waitUntilDone:NO];
Trong thời gian chuyển công việc từ chuỗi chính đến wor chủ đề ker, tôi thấy nhiều người làm điều này. Tại sao cần NSRunLoop ở đây? Nó làm gì ?
Tôi đọc rằng NSRunLoop
được sử dụng để quản lý sự kiện, tại sao không có gì ngoại trừ việc gọi runMode bên trong threadProc
?
tôi nghĩ về nó như một fancy while (true) {// chèn công việc được thực hiện ở đây}, trong đó bạn có thể tự động thêm mã để thực hiện (sự kiện, công việc, ổ cắm, v.v.). Các runloop không thực sự trống rỗng, một cổng đã được gắn liền với runloop, nó là một hình thức truyền thông interprocess. – foFox
Tôi thấy http://bou.io/RunRunLoopRun.html là hữu ích cũng như – onmyway133