我正在编写程序并尝试了解有关线程,多处理等的更多信息。
我的架构是模型/视图/控制器类型。
我有自己的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]];
}
这甚至可能吗?
答案 0 :(得分:0)
感谢您的反馈。我确实只是想探索一些不同的情况。我知道我可能会想办法解决一些事情,但这确实有助于我更清楚地理解界限。
如果它可以帮助其他任何人,我找到了解决我的特定问题的方法。事实证明我在ThumbnailView的init阶段中引用了_controlObject。在该阶段创建的对象与调用awakeFromNib时创建的ThumbnailView对象不同。
当我将_controlObject赋值移动到awakeFromNib方法时,所有工作都按预期工作。 (当然,我将代码重置为不包含任何花哨的**和&声明。
再次感谢您帮助我更多地了解这种语言。我开始喜欢它了。