在我的代码中,在一个班级我有一个ivar
FirstClass *first;
我可以在此类的实例中使用first
但是如果我想从另一个对象实例(甚至是另一个类)访问first
,我该怎么办?
答案 0 :(得分:2)
我假设你在谈论在另一个源文件中使用FirstClass而不是它自己的,对吗?
在这种情况下,您必须通过将其添加到第二个类“.m”文件的顶部来导入其标题:
#import "FirstClass.h"
如果你还需要在你的第二课“头”.h“-file中引用,那么你可以添加一个
@class FirstClass;
在@interface
块之前。这将告诉编译器它应该考虑该名称的类是否存在,但是除非您忘记在第二个类“.m”文件中导入给定的第一类“.h”文件,否则不要打扰警告
要允许从外部对象访问SecondClass的firstClass iVar,您需要为firstClass实现一个getter方法。
这是通过
完成的@property (nonatomic, readwrite, retain) FirstClass *firstClass;
在@interface
块中,
@synthesize firstClass;
在@implementation
区块中。
通过此设置,您可以调用[secondClassInstance firstClass];
或通过点语法secondClassInstance.firstClass;
访问它。
我的示例还将合成一个名为setFirstClass:
的setter方法。要将该属性设为只读,请在readwrite
声明中将readonly
更改为@property
。
样品:
<强> FirstClass.h:强>
#import <Cocoa/Cocoa.h>
@interface FirstClass : NSObject {
@private
}
//method declarations
@end
<强> FirstClass.m:强>
#import "FirstClass.h"
@implementation FirstClass
//method implementations
@end
<强> SecondClass.h:强>
#import <Cocoa/Cocoa.h>
@class FirstClass;
@interface SecondClass : NSObject {
@private
FirstClass *firstClass;
}
@property (nonatomic, readwrite, retain) FirstClass *firstClass;
//method declarations
@end
<强> SecondClass.m:强>
#import "SecondClass.h"
#import "FirstClass.h"
@implementation SecondClass
@synthesize firstClass;
- (id)init {
if ((self = [super init]) != nil) {
firstClass = [FirstClass alloc] init];
}
return self;
}
- (void)dealloc {
[firstClass release];
[super dealloc];
}
//method implementations
@end
答案 1 :(得分:0)
我会使用一个属性。可能在你的第二课的标题中有点像
@property (nonatomic, retain) FirstClass *first;
并在您的实施中
@synthesize first;
比创建SecondClass
SecondClass *second = [[SecondClass alloc] init];
你可以使用
second.first