Was bedeutet __OBJC__
in Objective C?__OBJC__ in Ziel C
#import <Availability.h>
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#endif
Was bedeutet __OBJC__
in Objective C?__OBJC__ in Ziel C
#import <Availability.h>
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#endif
Dies sieht wie Ihre vorkompilierte Header-Datei aus.
Der vorkompilierte Header wird von allen C-Dialektdateien in Ihrem Projekt gemeinsam verwendet. Es ist so, als ob alle Ihre .c, .cpp, .m und .mm Dateien eine unsichtbare # include Direktive als erste Zeile haben. Aber die Cocoa-Header-Dateien sind reine Objective C - der Versuch, sie in eine C/C++ - Quelle einzuschließen, wird nichts außer Syntaxfehlern liefern. Also die #ifdef.
Wenn Ihr Projekt nur Objective-C-Dateien (.m/.mm) enthält, was der typische Fall ist, ist das #ifdef nicht wirklich notwendig. Aber Xcode, der diesen Header überhaupt erzeugt hat, schützt Sie trotzdem.
Auch wenn es keine PCH-Datei ist, macht diese #ifdef nur Sinn, wenn die Datei sowohl aus Objective C als auch aus Plain C/C++ eingefügt werden soll. Aber es tut nicht weh, egal.
Es ist nur ein Makro-Symbol. In diesem Fall sollte Ihr Programm die Apple Cocoa Frameworks (Foundation und AppKit) importieren, wenn dieses Symbol definiert ist.
Dies wäre der Fall, wenn Sie eine objective-c/cocoa-Anwendung entwickeln würden. Mit anderen Worten, wenn Sie eine C++/Carbon-Anwendung entwickeln würden, würde das Symbol OBJC nicht definiert und diese objective-c-abhängigen Frameworks würden nicht importiert.
Es bedeutet, dass der objektive C-Compiler verwendet wird. So können Sie Hybrid-Header-Dateien erstellen, die beim Kompilieren von Ziel C oder C oder C++ verwendet werden können.
Sie es in einer Header-Datei wie diese verwenden können, wenn Sie eine Header-Datei, die definiert ein objektives c Objekt veröffentlichen wollte, den Sie C und C++ Programmierer/Code verfügbar machen wollte:
#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