目标C:在其他类中使用实例类

时间:2011-04-05 15:36:37

标签: objective-c class properties

在我的代码中,在一个班级我有一个ivar

FirstClass *first;

我可以在此类的实例中使用first 但是如果我想从另一个对象实例(甚至是另一个类)访问first,我该怎么办?

2 个答案:

答案 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