我有以下代码,除非类别名称留空,否则不起作用
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方法不存在。这与名称损坏有关吗?如果我命名与否,为什么重要?
如果您可以声明这样的未命名类别,是否可以为同一个类声明多个未命名的类别?
答案 0 :(得分:1)
问题是,这不是一个未命名的类别。这是课程延伸。
类扩展有点像类别,因为您可以声明要实现的类的方法和属性。但扩展实际上是该类主要实现的一部分。这意味着您可以执行诸如覆盖属性访问行为(您正在执行的操作)或添加ivars之类的操作。
类扩展需要使用实现块进行编译,并且只能有其中一个。