Cocoa 综合性能与ivar误差
我一直在“调试X86-64”模式(Xcode 3.6)下构建我的程序,一切都完美无瑕。但是,我刚刚尝试切换到“Release X86-64”模式,编译时收到我的每个属性的以下错误:Cocoa 综合性能与ivar误差,cocoa,compiler-construction,properties,ivar,synthesize,Cocoa,Compiler Construction,Properties,Ivar,Synthesize,我一直在“调试X86-64”模式(Xcode 3.6)下构建我的程序,一切都完美无瑕。但是,我刚刚尝试切换到“Release X86-64”模式,编译时收到我的每个属性的以下错误: Synthesized property 'x' must either be named the same as a compatible ivar or must explicitly name an ivar. 其中“x”是我的一个属性,第一个是“company”(我收到了51个此类错误)。在我的.h界面文件
Synthesized property 'x' must either be named the same as a compatible ivar or must
explicitly name an ivar.
其中“x”是我的一个属性,第一个是“company”(我收到了51个此类错误)。在我的.h界面文件中,我按以下方式列出了项目:
@property (copy) NSString *company,
*address1,
*address2,
*city,
*usState,
*zip,
*phone,
*fax,
*email,
*web; // etc, etc.
在我的.M实现文件中,我将它们合成为:
@synthesize company,
address1,
address2,
city,
usState,
zip,
phone,
fax,
email,
web; // etc, etc.
我的理解是,实例变量是为这些属性自动创建的。。。事实上,在我尝试以“发布”模式编译之前,它们似乎工作得很好
我在书中找不到任何东西,我必须解释一下。我是否做错了什么,或者更具体地说,我应该包括什么来修复“发布”编译
谢谢 我想我已经回答了我自己的问题。为了纠正这些错误,我做了两件事: 首先,我在接口文件中添加了实例变量声明。 其次,我将@synthesis指令更改为:
@synthesize company = company;
@synthesize address1 = address1;
etc...
这已修复了所有错误,并且在生成和发布模式下都能正确编译。还有另一个快速解决方案:在委托定义中添加这些属性
@interface YourAppDelegate : NSObject <NSApplicationDelegate> {
NSTextField * company;
NSSlider * company;
...
}
@property (copy) NSString *company,
*address1,
... ;
@接口YourAppDelegate:NSObject{
NSTextField*公司;
国家统计局*公司;
...
}
@财产(副本)NSString*公司,
*地址1,
... ;
如果您只想发布,但不想受“旧”运行时限制的困扰,请在生成设置中禁用32位体系结构。(实际上,“新”运行时最终得到的是1991年以来在IBM SOM中实现的,所以“旧”和“新”对于Objective-C运行时来说是非常相对的,但这是另一个故事。)好的,所以我刚刚发现了另一个线程,它似乎为这个主题增添了更多的亮点:我意识到,虽然我有一台64位的机器,我正在运行OS 10.6.8。。。这可能与此有关吗?编译器可能正在尝试以32位模式编译吗?我可能在这方面做得更好,但我怀疑我知道如何修复它,尽管我需要一些确认。我发现了这个线程:而且我肯定没有在接口部分声明实例变量,它现在看起来是这样的:@interface DBContactRecord:NSObject{}我下一步会尝试,但是如果有人能够确认,这将非常有用:)您的Xcode项目的构建设置将告诉您是构建32位(i386)还是64位(x86_64)。顺便说一句,没有“Xcode 3.6”这样的东西。深夜打字。。。我正在运行Xcode版本3.2.6:),如果变量的名称与属性的名称相同,则无需显式指定变量的名称。更好的做法是不要这样做:改为命名变量\u company
,这样您就不会因为忘记了self而意外地引用它而不是属性。
。