Objective C 中的循环依赖解决方法

发布于 2024-11-26 03:00:46 字数 434 浏览 1 评论 0原文

我有一个定义如下的协议:

@protocol Container

- (BOOL)putStuff: (Stuff *) theStuff;

@end

和带有以下声明的类:

@interface Stuff : NSObject {

}

@property(readwrite,nonatomic,retain) NSObject <Container> * containerHoldingMe;

@end

我在 putStuff 声明上收到错误 - “预期类型”。然而,如果我将该方法的参数更改为 NSObject,它就会编译正常 — 所以,我认为 Objective C 不允许循环依赖。

在我正在工作的实际课程中,我想实现两个 - 但是,如果没有它,我如何实现这样的逻辑?

I have a protocol that is defined like this:

@protocol Container

- (BOOL)putStuff: (Stuff *) theStuff;

@end

and class with following declaration:

@interface Stuff : NSObject {

}

@property(readwrite,nonatomic,retain) NSObject <Container> * containerHoldingMe;

@end

and I get an error on putStuff declaration — "Expected a type". If I change the argument of the method to NSObject, however, it compiles OK — so, I think that Objective C just doesn't allow loop dependence.

In real classes that I'm working at I want to implement two- However, how do I implement such logic without it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

原谅过去的我 2024-12-03 03:00:46

当编译器评估您的 Container 协议时,它并不知道您的 Stuff 类。您可以使用前向声明让编译器了解您的Stuff类:

@class Stuff;

@protocol Container

- (BOOL)putStuff: (Stuff *) theStuff;

@end

By the time the compiler evaluates your Container protocol, it does not know about your Stuff class. You can let the compiler know about your Stuff class with a forward declaration:

@class Stuff;

@protocol Container

- (BOOL)putStuff: (Stuff *) theStuff;

@end
临走之时 2024-12-03 03:00:46

您应该在此处使用id

@property (readwrite, nonatomic, retain) id<Container> containerHoldingMe;

You should use id here.

@property (readwrite, nonatomic, retain) id<Container> containerHoldingMe;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文