ios - Objective-C - 避免导入循环

标签 ios objective-c import

我想连接我的两个类,并用每个类的属性相互链接。我分解了这个例子的主要方面:

Ocean.h文件:

#import <Foundation/Foundation.h>
#import "Fish.h"

@interface Ocean : NSObject
@property (nonatomic) NSArray *listOfFishesInOcean;
@end

Fish.h 文件:

#import <Foundation/Foundation.h>
#import "Ocean.h"

@interface Fish : NSObject
@property (nonatomic) Ocean *homeOcean;    // Compiler: "Unknown type name Ocean"
@property (nonatomic) int age;
@end

我最后想做的是操作 Fish 对象的 age 属性并能够保存它(listOfFishesInOcean、NSUserDefaults),以及在保存完成时调用 Ocean 对象中的函数。这样我的海洋对象列表中就会始终包含最新的鱼类对象列表。

我的两个问题是:

  1. 如何避免 import-loop ,我认为这会导致编译器错误?
  2. 最终应该如何实现保存和操作流程?

我想过用通知和观察者来解决这个问题,但这样我仍然需要以任何方式过滤通知,因为我有多个海洋和更多的鱼。 解决它的另一个想法是给每个 Ocean 对象和 Fish 对象一个 ID,我将再次将其用作 NSUserDefaults 中的键。

如果有人对此有什么想法或其他想法,非常欢迎!

最佳答案

仅在“.m”文件中导入“.h”文件,如:

Ocean.h文件:

#import <Foundation/Foundation.h>
@class Fish;

@interface Ocean : NSObject
@property (nonatomic) NSArray *listOfFishesInOcean;
@end

Ocean.m文件:

#import "Ocean.h"
#import "Fish.h"

 @implementation Ocean

@end

Fish.h 文件:

#import <Foundation/Foundation.h>
@class Ocean;

@interface Fish : NSObject
@property (nonatomic) Ocean *homeOcean;    
@property (nonatomic) int age;
@end

Fish.m 文件:

#import "Fish.h"
#import "Ocean.h"

 @implementation Fish

 @end

关于ios - Objective-C - 避免导入循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38974196/

相关文章:

iphone - 实现授权

objective-c - 为什么在Objective-C和iOS中,[[NSMutableArray alloc] init]发出警告,但NSMutableArray.new没有给出警告?

javascript - Node 程序/模块读取自己的package.json : is that possible?

hadoop - sqoop导入的数据,但具有空的part-m-00000文件?

iphone - NSCache崩溃的应用程序

ios - 在 TableView 中隐藏 UIView 并更新约束

ios - 错误 ITMS-90085 : "No architectures in the binary. Lipo failed to detect any architectures in the bundle executable."

ios - Objective-C : Downloading File With Progress Bar

iphone - 如果您在 iTunes Connect 中输入了错误的 bundle ID,该怎么办

Python:从 1+ 级别向下导入