0

我正在编写一个程序并尝试了解有关线程、多处理等的更多信息。

我的架构是模型/视图/控制器类型。

我有自己的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]];
}

这甚至可能吗?

4

1 回答 1

0

感谢您的反馈。我确实只是在尝试探索一些不同的情况。我知道我可能会想方设法解决一些问题,但这确实有助于我更清楚地理解界限。

如果它可能对其他人有所帮助,我找到了解决我的特定问题的方法。事实证明,我在 ThumbnailView 的初始化阶段引用了 _controlObject。在该阶段创建的对象与调用 awakeFromNib 时创建的 ThumbnailView 对象不同。

当我将 _controlObject 分配移动到 awakeFromNib 方法时,一切都按我的预期工作。(当然,我将代码重置为不包含任何花哨的 ** 和 & 声明。

再次感谢您帮助我更多地了解这种语言。我开始有点喜欢它了。

于 2012-10-12T06:12:20.693 回答