混淆将 Obj-C 对象传递到方法中并保留对该对象的更改



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

我的体系结构是模型/视图/控制器类型。

我有自己的NSImageView子类(ThumbnailView),我想聪明一点,让它侦听消息来清除自己(所以所有的缩略图都只是自己清除,而我不必循环访问它们)。

问题是我的ThumbnailView由一个ThumbnailViewController控制,该实际上是监听消息的人。 当它收到消息时,它会衍生出一个新线程,其中包含一个类对象,即命令 (ClearThumbnailViewCommand)。 它将包含关联的ThumbnailView对象和键的字典项作为参数传递。 在ClearThumbnailViewCommand中,我将ThumbnailView对象的图像设置为一些中性图像(如灰色.jpg)。

所有这些都可以正常工作,但是,更改的缩略图对象与进入的缩略图对象不同。 所以我想我需要传递指针而不是对象。 我记得一些关于使用MyObject**而不是MyObject*和通过&MyObject的事情,但我似乎无法解开各种组合。 由于无法推理出来,我又回到了我通常的万无一失的系统,即尝试随机组合,但这次它没有帮助。

似乎即使我能够构造一个传递指针的类(不确定我是否正确使用这些术语),我也无法将其正确分配给不想要id**NSDictionary

如果有帮助的话,我将尝试在下面包含基础知识。


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]];
}

这可能吗?

感谢您的反馈。 我确实只是想探索一些不同的情况。 我知道我可能会想办法解决一些事情,但它确实帮助我更清楚地理解界限。

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

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

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

最新更新