2

我可以构建以下代码进行调试,但不能在 xcode 中为 OS X 目标发布:

myclass.h:

@interface myclass : NSObject

@property (nonatomic,copy) NSString *name;

@end

我的班级.m:

@implementation myclass {
    NSString *_name;
}

@synthesize name = _name;

@end

任何想法为什么?在 iOS 上,它为发布和调试而构建。

我知道将实例变量声明移动到 .h 会起作用,但我的意图是隐藏实现细节(当然,真正的类比这个例子更复杂)。在构建 64 位应用程序时,我已经在 Mountain Lion 上的最新 xcode 版本(4.6,构建 4H127)上尝试过这个。

4

3 回答 3

4

一种方法是使用类扩展。在你的.m文件中,写

@interface myclass ()
{
    NSString *_name;
}
@end

上面你的@implementationfor myclass

另一方面,您实际上不需要声明支持您的属性的实例变量。如果你只是写

@property (nonatomic, copy) NSString *name;

在您的类声明(以 开头@interface myclass : NSObject和结尾的代码@end)中,将自动为您生成一个支持NSString *ivar _name,您将能够在myclass. 你甚至不需要写@synthesize name = _name;。此外,如果你想使用一个变量名而不是_name支持你的属性name,你不需要声明 ivar;相反,您可以使用@synthesize

@synthesize name = m_Name;

在你的班级里@implementation

于 2013-03-15T12:33:31.967 回答
3

实现块中的实例变量需要现代的 Objective-C 运行时。请参阅Objective-C 功能可用性指数。可能是该版本针对不支持现代运行时的 OS X 版本。

于 2013-03-15T12:43:15.463 回答
1

您没有name在此处指定属性“”的对象类型:

@property (nonatomic,copy) name;

用这个

@property (nonatomic,copy) NSString *name;
于 2013-03-15T12:38:37.640 回答