Цель @class в Objective-C - PullRequest
       2

Цель @class в Objective-C

0 голосов
/ 13 марта 2011

У меня есть следующий код

#import <UIKit/UIKit.h>
#import "SecondLevelViewController.h"
@class DisclosureButtonController;

@interface DisclosureButtonController : SecondLevelViewController {
    NSArray *list;
    DisclosureButtonController *childController;
}

@property (nonatomic, retain) NSArray *list;

@end

Я не могу понять, что означает

@class DisclosureButtonController;

.

Может кто-нибудь объяснить мне?

1 Ответ

3 голосов
/ 13 марта 2011

Он просто сообщает компилятору, что DisclosureButtonController - это Class, который определен в другом месте.

Если вы удалите его, вы должны получить ошибку на DisclosureButtonController *childController;, потому что компилятор не знает, что вы хотите, чтобы он делал в этой строке.

Из Apple Doc Определение класса

Директива @class минимизирует объем кода, видимого компилятором и компоновщиком, и, следовательно, является самым простым способомдать предварительное объявление имени класса.Проще говоря, это позволяет избежать потенциальных проблем, которые могут возникнуть при импорте файлов, импортирующих еще другие файлы.Например, если один класс объявляет статически типизированную переменную экземпляра другого класса, и их два интерфейсных файла импортируют друг друга, ни один класс не может скомпилироваться правильно.


РЕДАКТИРОВАТЬ: я только что увидел, чтоДиректива @class здесь излишня, потому что вы объявляете этот класс на следующей строке.Возможно был @protocol, который использовал класс между @class и @interface.Но в вашем особом случае вы можете удалить его без проблем.Это избыточно.

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