gpt4 book ai didi

objective-c - 在 Cocoa 中的对象/线程之间传递数据

转载 作者:行者123 更新时间:2023-12-03 16:52:57 27 4
gpt4 key购买 nike

我从 Controller 创建一个新线程,如下所示:

[NSThread detachNewThreadSelector:@selector(makeMovie) toTarget:movieMaker withObject:nil];

从新线程/movieMaker 对象调用 Controller 上的方法的最佳方法是什么?

最佳答案

在这种情况下,您可能想要使用委托(delegate)模式。在你的 movie-maker 类的 .h 文件中:

@protocol MovieMakerDelegate;

@interface MovieMaker : NSObject
{
id<MovieMakerDelegate> delegate;

...
}

@property (nonatomic, assign) id<MovieMakerDelegate> delegate;

...

@end

@protocol MovieMakerDelegate <NSObject>
- (void)movieMaker:(MovieMaker *)maker didSomething:(id)result;
@end

...及其 .m:

@implementation MovieMaker

@synthesize delegate;

...

- (void)makeMovie
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

...

[self performSelectorOnMainThread:@selector(notifyDelegateOfDoingSomethingWithObject:) withObject:someObject waitUntilDone:YES];

[pool release];
}

- (void)notifyDelegateOfDoingSomethingWithObject:(id)someObject
{
[self.delegate movieMaker:self didSomething:someObject];
}

...

@end

然后在 Controller 的 header 中声明它支持 MovieMakerDelegate 协议(protocol),如下所示:

@interface MyController : Whatever <MovieMakerDelegate>

在您的.m中,在调用-detachNewThreadSelector:etc:之前,调用movieMaker.delegate = self;。在 Controller 类上实现 -movieMaker:didSomething: 方法,然后就可以开始了。

关于objective-c - 在 Cocoa 中的对象/线程之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7326418/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com