簡體   English   中英

在Objective-C中,如何從類別訪問私有財產

[英]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.mCategory.m 記住最后的h ,你只需要聲明你的私有屬性和方法,定義最好保存在ClassA.m

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM