Вы должны объявить свои глобальные переменные в G.h
, но определить их в G.m
, чтобы они связывались в цели только один раз. Так, если, например, у вас есть строковая константа, которая определена глобально, вы должны сделать:
G.h
extern NSString const *appName;
G.m
NSString const *appName = @"My Great App";
В вашем вставленном коде это экземпляр A
, который дублируется. Он импортируется в каждую единицу перевода, но каждый раз с тем же именем, что означает, что скомпилированные объекты не могут быть связаны. Предполагая, что вам нужен общий A
экземпляр с именем a
, вам нужно сделать:
G.h
@class A;
extern A *a;
G.m
#import "A.h"
#import "G.h"
A *a = nil;