使用实例类在我的代码,在一个类我有伊娃目标C:其他类
FirstClass *first;
,我可以在这个类的一个实例中使用first
。
但是,如果我想从另一个对象实例(甚至另一个类)访问first
,我该怎么做?
使用实例类在我的代码,在一个类我有伊娃目标C:其他类
FirstClass *first;
,我可以在这个类的一个实例中使用first
。
但是,如果我想从另一个对象实例(甚至另一个类)访问first
,我该怎么做?
我会用一个属性。可能在你喜欢
@property (nonatomic, retain) FirstClass *first;
你的第二类的东西标题和您的实现,当你创建一个对象
@synthesize first;
比你SecondClass
SecondClass *second = [[SecondClass alloc] init];
可以使用
second.first
我假设你说的是在另一个源文件中使用FirstClass而不是它自己的,对吧?
在这种情况下,你必须通过添加以下内容到第二课堂“的.m” -file的顶部导入其头:
#import "FirstClass.h"
如果你还需要在你的第二类参考“头 ”.H“ -file,那么你就可以在@interface
块前添加
@class FirstClass;
。这将告诉编译器它应该考虑一个该类名称的类是存在的,但是除非你忘记在第二类的“.m”文件中导入给定的第一类'“.h”文件,否则不要打扰警告。 。
要允许从外部对象访问您的SecondClass的firstClass iVar,您需要为firstClass实现getter方法。
这与
@property (nonatomic, readwrite, retain) FirstClass *firstClass;
在
@interface
块
,和
@synthesize firstClass;
在@implementation
块完成的。
使用此设置,您可以调用[secondClassInstance firstClass];
或通过点语法secondClassInstance.firstClass;
访问它。 我的示例还将合成一个名为setFirstClass:
的setter方法。要使该属性为只读,请在@property
声明中将readwrite
更改为readonly
。
样品:
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
FirstClas s *先;在第二类中声明,我想在Firstclass中使用“first”,好吗? – CrazyDev 2011-04-05 15:47:41
增加了属性声明。再次检查我的答案。 – Regexident 2011-04-05 15:55:59