Цель C: использовать экземпляр класса в другом классе - PullRequest
0 голосов
/ 05 апреля 2011

В моем коде в классе у меня есть ivar

FirstClass *first;

, и я могу использовать first в экземпляре этого класса.
Но если я хочу получить доступ к first издругой экземпляр объекта (или даже другой класс), как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

Полагаю, вы говорите об использовании FirstClass в другом исходном файле, чем его собственный, верно?

В этом случае вам придется импортировать его заголовок, добавив его в начало вашего второго класса '«.m» -file:

#import "FirstClass.h"

Если вам также нужно сослаться в файле заголовка «.h» второго класса, то вы можете добавить

@class FirstClass;

доблок @interface.Это скажет компилятору, что он должен рассматривать класс с таким именем как существующий, но не беспокоить вас предупреждениями, если вы не забудете импортировать указанный файл ".h" первого класса во файл ".m" второго класса..

Чтобы разрешить доступ посторонних объектов к iCar firstClass вашего SecondClass, вам необходимо реализовать метод getter для firstClass.

Это делается с помощью

@property (nonatomic, readwrite, retain) FirstClass *firstClass;

в блоке @interface и

@synthesize firstClass;

в блоке @implementation.

С помощью этой настройки вы можете либо вызвать [secondClassInstance firstClass];, либо получить к нему доступ через синтаксис точки secondClassInstance.firstClass;.В моем примере также будет синтезирован метод сеттера setFirstClass:.Чтобы сделать свойство доступным только для чтения, измените 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
0 голосов
/ 05 апреля 2011

Я бы использовал собственность. Вероятно, в заголовке вашего второго класса что-то вроде

@property (nonatomic, retain) FirstClass *first;

и в вашей реализации

@synthesize first;

Чем при создании объекта вашего SecondClass

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

вы можете использовать

second.first
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...