Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 类别是否允许在其实现中添加实例变量?_Objective C_Io_Xcode4.5 - Fatal编程技术网

Objective c 类别是否允许在其实现中添加实例变量?

Objective c 类别是否允许在其实现中添加实例变量?,objective-c,io,xcode4.5,Objective C,Io,Xcode4.5,我正在使用ios6.0SDK和xcode 4.5.2 下面是我用来实现一个类别的代码 h m 正如我在许多帖子中读到的,它说我们不能在类别中包含实例变量。所以上面的代码不应该工作。但当我尝试时,一切都很好 是否有任何与类别相关的更改或只是运气而已???您没有添加iVar。您已经定义了一个全局变量\u bsy,并且正在类别定义的属性的getter/setter中访问它。这是因为您定义了一个全局变量,它不是实例变量 尝试并实例化此对象的两个实例,您会发现每个实例不能包含不同的值。正如其他人所指出的,

我正在使用ios6.0SDK和xcode 4.5.2

下面是我用来实现一个类别的代码

h

m

正如我在许多帖子中读到的,它说我们不能在类别中包含实例变量。所以上面的代码不应该工作。但当我尝试时,一切都很好


是否有任何与类别相关的更改或只是运气而已???

您没有添加iVar。您已经定义了一个全局变量
\u bsy
,并且正在类别定义的属性的getter/setter中访问它。

这是因为您定义了一个全局变量,它不是实例变量


尝试并实例化此对象的两个实例,您会发现每个实例不能包含不同的值。

正如其他人所指出的,您没有添加实例变量,而是添加一个全局变量,该变量将在所有实例之间共享


类别无法添加实例变量。但是,如果绝对需要,您可以使用
objc\u setAssociatedObject()
objc\u getAssociatedObject()
模拟实例变量。我有一个宏,允许您在如下类别中声明“属性”:

@implementation NSObject (AwesomeUtils)

JESynthesize(assign, NSInteger, index, setIndex);
JESynthesize(strong, NSString *, name, setName);
JESynthesize(copy, void(^)(void), completion, setCompletion);
JESynthesize(unsafe_unretained, id, unsafeObject, setUnsafeObject);
JESynthesize(weak, id<UITableViewDelegate>, delegate, setDelegate);
JESynthesize(strong, NSString *, readonlyID, changeReadonlyID);

// …
@end
@实现NSObject(AwesomeUtils)
jesynthesis(赋值、NSInteger、索引、setIndex);
jesynthesis(强,NSString*,name,setName);
综合(副本、作废(^)(作废)、完成、设置完成);
JesSynthesis(不安全的、未维护的、id的、未安全对象的、设置未安全对象的);
jesynthesis(弱、id、委托、setDelegate);
JEsynthesis(强、NSString*、readonlyID、changeReadonlyID);
// …
@结束
我用引号表示“properties”,因为即使没有
@property
声明,您也可以使用它们。宏还支持

您可以在此处检查实现(头文件位于底部):

这不是一个实例变量。尝试使用NSObject的多个实例。您是对的,不适用于两个实例。;)
@implementation NSObject (busyMode)
BOOL _bsy;

-(BOOL)busy{
    return _bsy;
}

-(void)setBusy:(BOOL)busy
{
    _bsy = busy;
}
@end
@implementation NSObject (AwesomeUtils)

JESynthesize(assign, NSInteger, index, setIndex);
JESynthesize(strong, NSString *, name, setName);
JESynthesize(copy, void(^)(void), completion, setCompletion);
JESynthesize(unsafe_unretained, id, unsafeObject, setUnsafeObject);
JESynthesize(weak, id<UITableViewDelegate>, delegate, setDelegate);
JESynthesize(strong, NSString *, readonlyID, changeReadonlyID);

// …
@end