2011-04-05 35 views
0

使用实例类在我的代码,在一个类我有伊娃目标C:其他类

FirstClass *first; 

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

回答

0

我会用一个属性。可能在你喜欢

@property (nonatomic, retain) FirstClass *first; 

你的第二类的东西标题和您的实现,当你创建一个对象

@synthesize first; 

比你SecondClass

SecondClass *second = [[SecondClass alloc] init]; 

可以使用

second.first 
2

我假设你说的是在另一个源文件中使用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 
+0

FirstClas s *先;在第二类中声明,我想在Firstclass中使用“first”,好吗? – CrazyDev 2011-04-05 15:47:41

+0

增加了属性声明。再次检查我的答案。 – Regexident 2011-04-05 15:55:59