Objective c 垃圾回收Cocoa应用程序中关于属性的警告

Objective c 垃圾回收Cocoa应用程序中关于属性的警告,objective-c,cocoa,properties,garbage-collection,Objective C,Cocoa,Properties,Garbage Collection,这是我的代码: @interface Object : NSObject { @private NSArray *array; } @property NSArray *array; @end 以及实现中的@synthesis。我在@属性的行中得到一个编译器警告: 警告:实现NSCopying协议的属性“array”上的默认分配属性不适用于-fobjc gc[-only] 如果我将属性写为@property(assign)NSArray*array,它不会显示。这是关于什么的?属性默认

这是我的代码:

@interface Object : NSObject {
@private
  NSArray *array;
}

@property NSArray *array;

@end
以及实现中的
@synthesis
。我在
@属性的行中得到一个编译器警告:

警告:实现NSCopying协议的属性“array”上的默认分配属性不适用于-fobjc gc[-only]


如果我将属性写为
@property(assign)NSArray*array
,它不会显示。这是关于什么的?

属性默认分配。您的属性是赋值。

在本例中,您创建的属性是指向对象的指针。默认情况下,赋值不适用于对象,对象应声明为
retain
copy

在您的情况下,您应该将您的财产定义为:

@property (nonatomic, copy) NSArray *array;
您可以在此处使用
retain
而不是
copy
,但是有

编辑

要回答您似乎要问的更深层次的问题,请从Cocoa邮件列表中获取答案


您使用的是LLVM编译器还是gcc?

关于启用GC的应用程序中的分配与复制,我是通过谷歌找到的


我认为我们通常使用assign,但如果需要,我们将使用copy,比如NSString对象。所以为了消除警告,我们只需显式地将其指定为assign。

因为您必须显式地了解itOkay,所以这取决于
数组的易变性?如警告中所述,垃圾收集对这一点有何影响?正如jer所说,如果你明确地说,它会让你这么做。我理解这一点,但为什么只有在我使用垃圾收集时,它才会警告我呢?我只是想了解为什么有人在那里提出这个警告;)LLVM。我现在明白了。问题在于,GC环境中的
assign
会生成强引用,而非GC应用程序中的引用较弱。编辑你的答案。