Что означает __OBJC__
в Objective C?
#import <Availability.h>
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#endif
Что означает __OBJC__
в Objective C?
#import <Availability.h>
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#endif
Это выглядит как ваш предварительно скомпилированный файл заголовка.
Предварительно скомпилированный заголовок разделяется между всеми файлами C-диалектов в вашем проекте. Как будто все ваши файлы .c,.cpp,.m и .mm имеют невидимую директиву #include в качестве первой строки. Но заголовочные файлы Cocoa являются чистыми Objective C - попытка включить их в источник C/С++ ничего не даст, кроме синтаксических ошибок. Таким образом, #ifdef.
Если ваш проект содержит только файлы Objective C (.m/.mm), что является типичным случаем, #ifdef действительно не требуется. Но Xcode, который сгенерировал этот заголовок, в первую очередь, защищает вас все равно.
Даже если это не файл PCH, этот #ifdef имеет смысл только в том случае, если файл должен быть включен как из Objective C, так и из простого C/С++. Но это не повредит.
Это означает, что используется компилятор цели C. Таким образом, вы можете создавать гибридные файлы заголовков, которые можно использовать при компиляции объектных C или C или С++.
Вы можете использовать его в заголовочном файле, подобном этому, если вы хотите опубликовать файл заголовка, который определил объектный объект c, который вы хотели бы сделать доступным для c/С++ программистов/кода:
#ifndef MYHEADER_H
#define MYHEADER_H
#ifdef __OBJC__
// Put objective C things in this block
// This is an objc object implemented in a .m or .mm file
@implementation some_objc_object {
}
@end
#endif
#ifdef __cplusplus
#define CLINKAGE "C"
// c++ things that .m or .c files wont understand go in here
// This class, in a .mm file, would be able to call the obj-c objects methods
// but present a c++ interface that could be called from c++ code in .cc or .cpp
// files
class SomeClassThatWrapsAnObjCObject
{
id idTheObject;
public:
// ...
};
#endif
// and here you can declare c functions and structs
// this function could be used from a .c file to call to a .m file and do something
// with the object identified by id obj
extern CLINKAGE somefunction(id obj, ...);
#endif // MYHEADER_H
Его просто символ макроса. В этом случае, если этот символ определен, ваша программа должна импортировать фреймворки Apple Cocoa (Foundation и AppKit).
Это будет иметь место, если вы разрабатываете приложение objective-c/Cocoa. Другими словами, если вы разрабатываете приложение С++/carbon, символ OBJC не будет определен, и эти зависимые фреймы objective-c не будут импортированы.