首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置NSInteger属性时接收方类型'NSInteger‘无效

设置NSInteger属性时接收方类型'NSInteger‘无效
EN

Stack Overflow用户
提问于 2010-06-25 00:03:01
回答 2查看 4.1K关注 0票数 2

在我的一个简单类的实现中,我在这一行得到了一个错误"Invalid receiver type 'NSInteger'“:

代码语言:javascript
复制
        self.price = p; // this line throws error

我应该将价格指定为copy吗?更多详细信息:

头文件:

代码语言:javascript
复制
@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

实施:

代码语言:javascript
复制
@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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-25 00:19:50

不,默认的assign是您想要的。

坦率地说,这个错误对我来说没有任何意义--代码中是否还有其他东西,比如setPrice的显式实现?同时,抓住救命稻草,试着在这个初始化器中省略通过self进行的访问。

(实际上,在所有四个作业中。您对copy的使用与直接访问ivars是一致的。如果您使用的是copy设置器,则不需要抢占地对参数进行copy,并且像这里这样做--没有相应的release --会导致泄漏。坚持这样或那样的方式。)

票数 1
EN

Stack Overflow用户

发布于 2010-06-25 00:17:41

否,价格不应指定为(copy)copyretain仅用于对象,而不是像NSInteger这样的原始值。

顺便说一句,您已经将(copy)指定为name和category属性的一个属性,但是在赋值时再次复制它们,这是多余的。为属性指定(copy)意味着只要将该属性设置为新值,就会自动调用copy

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3111700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档