【问题标题】:NSNotification and NSThreadNSNotification 和 NSThread
【发布时间】:2011-11-24 23:51:40
【问题描述】:

我使用 NSThread 在单独的线程上创建一个对象。

NSThread* myThread = [[[NSThread alloc] initWithTarget:self selector:@selector(createNewObject:) object:elements] autorelease];
[myThread start];  // Actually start the thread

那个对象等待一个事件。当该事件发生时,会在默认通知中心发布通知。

我的 AppController 观察到该通知并运行一个选择器。

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
        [nc addObserver:self selector:@selector(myMethod:) name:MyNotification object:nil];

问题: 选择器中的方法 (myMethod:) 是在主线程上运行还是在上面的线程上运行 (myThread) ?

【问题讨论】:

    标签: objective-c cocoa delegates nsthread nsnotification


    【解决方案1】:

    您发布通知的同一线程。

    在多线程应用程序中,通知总是在发布通知的线程中传递,这可能与观察者注册自己的线程不同。 (Source)

    脚注:对象不能等待事件。对象只是存在。方法可以等待事件。

    【讨论】:

    • 谢谢!!! (通过说“等待事件”,我的意思是它对用户交互做出反应。抱歉不清楚。)
    • 顺便说一句:有没有办法找出运行某个方法的线程的名称?
    • @Daniel:线程并没有真正的名字。除了主线程,就是这样。
    • 我的意思是我自己创建的线程,或者主线程。例如不应该是 NSThread *myGreatThread 的名称;成为“myGreatThread”?
    • @Daniel:在NSThread *myGreatThread中,线程没有被命名为myGreatThread,可能持有线程指针的变量被命名为myGreatThread。您可以命名一个线程,正如您已经找到的那样,但您必须自己这样做,通过向线程对象发送消息来设置线程对象的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    相关资源
    最近更新 更多