[英]in Objective-C, how to access private property from category
我想从其类别访问类的私有属性。
但是要获得私人财产,我必须重新申请同一个私人财产。
如果我没有重新声明,我收到编译错误, Property '<property name>' not found on object of type '<class name> *'
。
这是从类别访问类的私有属性的正确方法吗?
还有更好的方法吗?
以下代码是私有财产在类别中重新声明的代码:
ClassA.h
@interface ClassA : NSObject
-(void)method1;
@end
ClassA.m
#import "ClassA.h"
// private property
@interface ClassA()
@property (nonatomic) NSString *s;
@end
@implementation ClassA
@synthesize s;
-(void)method1
{
self.s = @"a";
NSLog(@"%@", [NSString stringWithFormat:@"%@ - method1", self.s]);
}
@end
ClassA的+ Category.h
#import "ClassA.h"
@interface ClassA(Category)
-(void)method2;
@end
ClassA的+ Category.m
#import "ClassA+Category.h"
// redeclare private property
@interface ClassA()
@property(nonatomic) NSString *s;
@end
@implementation ClassA(Category)
-(void)method2
{
NSLog(@"%@", [NSString stringWithFormat:@"%@ - method2", self.s]);
}
@end
是为私有属性创建文件(ClassA + Private.m)并从ClassA.m和ClassA + Category.m导入它的好方法:
ClassA的+ Private.m
@interface ClassA()
@property(nonatomic) NSString *s;
@end
解决此问题的最佳方法是创建ClassA+Private.h
并将其导入ClassA.m
和Category.m
。 记住最后的h
,你只需要声明你的私有属性和方法,定义最好保存在ClassA.m
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.