在我的一个简单类的实现中,我在这一行得到了一个错误"Invalid receiver type 'NSInteger'“:
self.price = p; // this line throws error我应该将价格指定为copy吗?更多详细信息:
头文件:
@interface SafeItem : NSObject {
NSString *name;
NSInteger price;
NSString *category;
NSInteger itemid;
BOOL hasImage;
}
@property (nonatomic,copy) NSString *name;
@property (nonatomic) NSInteger price;
@property (nonatomic,copy) NSString *category;
@property NSInteger itemid;
@property BOOL hasImage;
- (id)initWithName:(NSString*) n price:(NSInteger) p category:(NSString*) c;
@end实施:
@implementation SafeItem
@synthesize name, price, category, itemid, hasImage;
- (id)initWithName:(NSString*) n price:(NSInteger) p category:(NSString*) c {
if(self=[super init]){
self.itemid = [SafeItem getNextId];
self.name = [n copy];
self.price = p; // this line throws error
self.category = [c copy];
}
return self;
}发布于 2010-06-25 00:19:50
不,默认的assign是您想要的。
坦率地说,这个错误对我来说没有任何意义--代码中是否还有其他东西,比如setPrice的显式实现?同时,抓住救命稻草,试着在这个初始化器中省略通过self进行的访问。
(实际上,在所有四个作业中。您对copy的使用与直接访问ivars是一致的。如果您使用的是copy设置器,则不需要抢占地对参数进行copy,并且像这里这样做--没有相应的release --会导致泄漏。坚持这样或那样的方式。)
发布于 2010-06-25 00:17:41
否,价格不应指定为(copy)。copy和retain仅用于对象,而不是像NSInteger这样的原始值。
顺便说一句,您已经将(copy)指定为name和category属性的一个属性,但是在赋值时再次复制它们,这是多余的。为属性指定(copy)意味着只要将该属性设置为新值,就会自动调用copy。
https://stackoverflow.com/questions/3111700
复制相似问题