Cocoa 综合性能与ivar误差

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界面文件

我一直在“调试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界面文件中,我按以下方式列出了项目:

@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而意外地引用它而不是属性。