【问题标题】:ivars allowed in Cocoa Touch-based anonymous category but not in "regular" Cocoa?在基于 Cocoa Touch 的匿名类别中允许使用 ivars,但在“常规”Cocoa 中不允许使用 ivar?
【发布时间】:2012-04-04 23:58:40
【问题描述】:

在 iOS 和常规 OS X 开发之间切换时,我注意到两件事:

//SomeClass.h
@interface SomeClass: SomeUIClass

    @property (retain)SomeProperty* someProperty;

@end

//SomeClass.m
@interface SomeClass ()
{
    SomePrivateVar* somePrivateVar;
}
@end

@implementation SomeClass

@synthesize someProperty;
@end

上面的代码在 iOS 下编译得很好。那就是:

  1. 我可以在不显式声明 ivar 的情况下合成属性 在公共@interface中
  2. 我可以在 .m 文件中进一步声明其他私有 ivars 匿名类别(类扩展)。

但是,如果为 OS X 编译并子类化一些基于 NS 的类而不是基于 UI 的类(例如,NSView 而不是 UIView),上述两种情况都会导致编译器错误。

我想我认为 Objective-C 2. 通常允许上述内容,但它们只是 iOS 中的“快捷方式”?或者它们在 iOS 中被允许但在 OS X 中是怎么回事?

【问题讨论】:

    标签: cocoa-touch cocoa objective-c-2.0


    【解决方案1】:

    这些是 "modern runtime" 的功能,只能用于 Mac OS X 上的 64 位应用程序。您可能正在构建一个通用二进制文件,其中还包括一个 32 位版本。

    【讨论】:

    • 哦....啊哈。是的,实际上我正在构建通用 32/64,事实上,由于某种原因,最终必须以 32 编译 auval(音频单元验证工具——我正在构建一个音频单元插件)没有如果它是在 64 位下构建的,甚至看不到构建的组件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多