11
我想訪問類別的私有財產。,如何從類別訪問私有財產
但要訪問私有財產,我必須重新聲明類別中的同一私有財產。
如果我不重新聲明,我得到一個編譯錯誤,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
我想說只在'.m'中導入'ClassA + Private.h'會更好。在'ClassA.h'中放置'ClassA + Private.h'使得所有導入'ClassA.h'的類都可以看到這些屬性,這些都違背了目的。 – 2012-07-19 09:33:05
另外,我認爲'ClassA + Protected.h'會比'ClassA + Private.h'更準確。 – 2012-07-19 09:33:59
同意1並編輯答案。至於保護,我同意這會讓眼睛流血,但對於不是來自其他編程語言的人,這可能沒有什麼區別,所以我只是使用了問題作者所提出的命名。 – lawicko 2012-07-19 09:59:54