未命名的类别和目标C.

时间:2011-11-11 00:49:35

标签: objective-c categories

我有以下代码,除非类别名称留空,否则不起作用

PrivatePropertyTest.h

@interface PrivatePropertyTest : NSObject
@property (readonly) int readonly;
- (void) testMethod;
@end

PrivatePropertyTest.m

#import "PrivatePropertyTest.h"
@interface PrivatePropertyTest (/*If I place a name in here it doesn't work*/)
@property (readwrite) int readonly;
@end

@implementation PrivatePropertyTest
@synthesize readonly;
- (void) testMethod
{
    self.readonly = 2;
}
@end

的main.m

#import <Foundation/Foundation.h>
#import "PrivatePropertyTest.h"

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        PrivatePropertyTest *pPT = [[PrivatePropertyTest alloc] init];
        [pPT testMethod];
        //pPT.readonly = 1;

        // insert code here...
        NSLog(@"Hello, World!");

    }
    return 0;
}

当我给它一个名字时,表示选择器的setter方法不存在。这与名称损坏有关吗?如果我命名与否,为什么重要?

如果您可以声明这样的未命名类别,是否可以为同一个类声明多个未命名的类别?

1 个答案:

答案 0 :(得分:1)

问题是,这不是一个未命名的类别。这是课程延伸。

类扩展有点像类别,因为您可以声明要实现的类的方法和属性。但扩展实际上是该类主要实现的一部分。这意味着您可以执行诸如覆盖属性访问行为(您正在执行的操作)或添加ivars之类的操作。

类扩展需要使用实现块进行编译,并且只能有其中一个。