Loose-Info.com

Last Update 2019/03/17


TOP - Objective-C - @protected

インスタンス変数の有効範囲をクラス内および継承されるクラス内とします。
有効範囲の指定を行わない場合は、@protectedが適用となります。

@protected リスト1

リスト1
インスタンス変数宣言リスト
次のコンパイラ指定が出現するまで有効

(例)
※ Xcodeで生成される「***_Prefix.pch」などのファイルの内容は記載しません。

#import <Foundation/Foundation.h> @interface MyTestClass1 : NSObject { NSString *messageString1; // 有効範囲指定無し(デフォルトは@protected) @protected NSString *messageString2; @private NSString *messageString3; } - (void)testMethod; @end @implementation MyTestClass1 - (void)testMethod { messageString1 = [NSString stringWithFormat:@"messageString1"]; messageString2 = [NSString stringWithFormat:@"messageString2"]; messageString3 = [NSString stringWithFormat:@"messageString3"]; NSLog(@"MyTestClass1 : %@ %@ %@", messageString1, messageString2, messageString3); } @end @interface MyTestClass2 : MyTestClass1 - (void)testMethod; @end @implementation MyTestClass2 - (void)testMethod { NSString *messageString1 = [NSString stringWithFormat:@"messageString1_2"]; NSString *messageString2 = [NSString stringWithFormat:@"messageString2_2"]; NSString *messageString3 = [NSString stringWithFormat:@"messageString3_2"]; NSLog(@"MyTestClass2 : %@ %@ %@", messageString1, messageString2, messageString3); // messageString1、messageString2はインスタンス変数にアクセス可能なため、 // インスタンス変数が隠されている旨の警告発生 // @private指定されているmessageString3には警告無し } @end int main (void) { MyTestClass1 *c1 = [[MyTestClass1 alloc] init]; MyTestClass2 *c2 = [[MyTestClass2 alloc] init]; [c1 testMethod]; [c2 testMethod]; return 0; }

実行結果
MyTestClass1 : messageString1 messageString2 messageString3 MyTestClass2 : messageString1_2 messageString2_2 messageString3_2