我正在编写一个程序并尝试了解有关线程、多处理等的更多信息。
我的架构是模型/视图/控制器类型。
我有自己的NSImageView
(ThumbnailView) 子类,我想变得聪明一点,让它听一个消息来清除自己(所以所有的缩略图都会自行清除,而无需我循环浏览它们)。
问题是我ThumbnailView
是由一个ThumbnailViewController
真正在听消息的人控制的。当它收到消息时,它会启动一个带有类对象的新线程,该类对象是命令 ( ClearThumbnailViewCommand
)。ThumbnailView
它将包含关联对象和键的字典项作为参数传递。在ClearThumbnailViewCommand
我将ThumbnailView
对象的图像设置为一些中性图像(如 gray.jpg)。
所有这一切都很好,但是,更改的 Thumbnail 对象与进入的 Thumbnail 对象不同。所以我认为我需要传递一个指针而不是对象。我记得一些关于使用MyObject**
而不是MyObject*
通过,&MyObject
但我似乎无法解开各种组合。由于无法推理出来,我回到了我通常的万无一失的尝试随机组合事物的系统,但这一次它没有帮助。
似乎即使我能够构造一个传递指针的类(不确定我是否正确使用了这些术语),我也无法将其正确分配给NSDictionary
不需要id**
.
如果有帮助的话,我会尝试包括以下基础知识。
ThumbnailVew : NSImageView {
ThumbnailVewController * _controller;
}
init {
_controller = [[ControllerClass alloc] initWithControlObject: &self];
}
ThumbnailVewController : ControllerClass {
id ** _controlObject;
}
initWithControlObject: (id**)object {
_controlObject = object;
}
然后,当发布消息时,ThumbnailVewController
会调用一个最终执行此操作的方法……当然不会让我通过&_controlObject
当全部重写以便我可以通过_controlObject
时,我没有收到错误,但是ThumbnailView
我更改的只是该方法的本地。
if([command isEqualToString:@"CLEAR_THUMBNAILS"]) {
NSDictionary * dict;
dict = [[NSDictionary alloc] initWithObjectsAndKeys: &_controlObject, @"thumbnail", nil];
[self newThreadWithCommand:[[[ClearThumbnailViewCommand alloc] initWithArgument:dict] autorelease]];
}
这甚至可能吗?