1

我收到了这个烦人的警告

Apple Mach-O 链接器警告
合并暂定定义 _searchFlag 时对齐丢失

我已经像这样在 constant.h 文件中声明了搜索标志

BOOL 搜索标志

从过去的两天开始,我一直在解决这个问题,我已经尝试了谷歌的所有可能的解决方案,但它们似乎都没有奏效。

我的应用程序同时支持 armv6 和 v7 架构,我已经为其添加了设置,但这个问题似乎是问题所在,它只是这个 bool 标志自 2 天以来一直在咬我的头。

请帮我解决这个问题 谢谢

4

2 回答 2

2

我的猜测是您将此头文件包含在多个源文件中。如粘贴在这里,这将导致多个符号称为_searchFlag,每个包含一个标题。

这里通常的模式,假设您试图声明一个BOOL名为的全局变量searchFlag,您可以从多个源文件中访问该变量,将使用关键字在标头中声明它extern,然后仅在一个源文件中定义它。

头文件(例如称为“Foo.h”):

extern BOOL searchFlag;

一个源文件(例如“Foo.m”):

BOOL searchFlag;

许多源/头文件:

#import "Foo.h";

通过没有,extern您在技术上在包含/导入标头的每个源文件中重新声明它。

于 2012-01-18T00:50:56.160 回答
1

标头中的全局变量在 ObjC 中是不好的 juju;我不会对全局变量的使用做出判断(因为它们有时确实是必要的),但我会以不同的方式声明它们。

我能想到的最简洁和最简单的方法(也是我的首选方法)是创建一个新类,将全局变量的访问器实现为类方法,并将变量本身声明为源文件中的静态变量。

myglobal.h

@interface MyGlobal : Object
{
}

+ (BOOL)searchFlag;
+ (void)setSearchFlag:(BOOL)aFlag;

@end


myglobal.m

#import "myglobal.h"

// Static variables
static BOOL _searchFlag = NO;

@implementation MyGlobal

+ (BOOL)searchFlag
{
    return _searchFlag;
}

+ (void)setSearchFlag:(BOOL)aFlag
{
    _searchFlag = aFlag;
}

@end

使用这种方法,访问全局变量就像[MyGlobal searchFlag]or一样简单[MyGlobal setSearchFlag: YES]

于 2012-01-18T01:03:30.057 回答