Last Update 2013/02/13
TOP - Objective-C - @private
インスタンス変数の有効範囲をクラス内のみとします。
@private リスト1
リスト1
インスタンス変数宣言リスト
次のコンパイラ指定が出現するまで有効
次のコンパイラ指定が出現するまで有効
(例)
※ Xcodeで生成される「***_Prefix.pch」などのファイルの内容は記載しません。
#import <Foundation/Foundation.h>
@interface MyTestClass1 : NSObject
{
NSString *messageString1;
@private
NSString *messageString2;
}
- (void)testMethod;
@end
@implementation MyTestClass1
- (void)testMethod
{
messageString1 = [NSString stringWithFormat:@"messageString1"];
messageString2 = [NSString stringWithFormat:@"messageString2"];
NSLog(@"MyTestClass1 : %@ %@", messageString1, messageString2);
}
@end
@interface MyTestClass2 : MyTestClass1
- (void)testMethod;
@end
@implementation MyTestClass2
- (void)testMethod
{
NSString *messageString1 = [NSString stringWithFormat:@"messageString1_2"];
NSString *messageString2 = [NSString stringWithFormat:@"messageString2_2"];
NSLog(@"MyTestClass2 : %@ %@", messageString1, messageString2);
// messageString1はインスタンス変数にアクセス可能なため、インスタンス変数が隠されている旨の警告発生
// @private指定されているmessageString2には警告無し
}
@end
int main (void)
{
MyTestClass1 *c1 = [[MyTestClass1 alloc] init];
MyTestClass2 *c2 = [[MyTestClass2 alloc] init];
[c1 testMethod];
[c2 testMethod];
return 0;
}
実行結果
MyTestClass1 : messageString1 messageString2
MyTestClass2 : messageString1_2 messageString2_2