与NSInteger的关联引用

时间:2013-12-04 15:34:47

标签: ios objective-c

我正在开发iOS 5.0+应用,我正在为UIButton创建一个类别:

@interface UIButton (NotificationBall)

@property (nonatomic, assign) NSInteger type;
@property (nonatomic, assign) NSInteger index;

@end

及其实施:

#import "UIButton+NotificationBall.h"

@implementation UIButton (NotificationBall)

@dynamic type;
@dynamic index;

@end

在互联网上搜索我发现了question,但我没有找到NSInteger的任何示例。

我是否需要使用NSNumber而不是NSInteger?
如果我使用,NSNumber,我该怎么办?

1 个答案:

答案 0 :(得分:3)

只能将Objective-C对象设置为 关联对象,标量不能直接使用。 所以你可以将属性声明为

@property (nonatomic, strong) NSNumber *type;

并直接使用答案https://stackoverflow.com/a/5500525/1187415中的代码 你引用的。

或者保留NSInteger属性,并将其打包/解包到NSNumber 在这样的getter / setter方法中:

-(void)setType:(NSInteger)type
{
    objc_setAssociatedObject(self, &UIB_TYPE_KEY, @(type), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

-(NSInteger)type
{
    return [objc_getAssociatedObject(self, &UIB_TYPE_KEY) integerValue];
}

备注:“type”和“index”是很常见的名字。您应该考虑使用一些前缀来添加属性名称 避免与UIButton的现有属性发生可能的名称冲突。