5

ここで私の混乱を説明しようとしています。この質問に修正が必要かどうか教えてください。

Appleのドキュメントによると: readonly プロパティのリファレンス -

Apple ドキュメント リンク

したがって、セッターが作成されないため、読み取り専用プロパティに値を設定することはできません。しかし、これをテストするためのデモ プロジェクトを作成しました。私のコードサンプルをあなたと共有しています。

「ModelTest1.h」クラスです。読み取り専用のプロパティがあります。

#import <Foundation/Foundation.h>

@interface ModelTest1 : NSObject

@property (readonly) NSMutableArray  *arrTest;

@end

現在、KVC を使用して値を設定しています。このプロパティは読み取り専用であるため、実行時にエラーが発生するはずですが、発生していません。

- (void)readonlyTest
{
    ModelTest1  *obj1 = [ModelTest1 new];

    NSLog(@"obj1.arrTest before = %@",obj1.arrTest);

    [obj1 setValue:[NSMutableArray new] forKey:@"arrTest"];

    NSLog(@"obj1.arrTest after = %@",obj1.arrTest);

    [obj1.arrTest addObject:@"Str 1"];

    NSLog(@"obj1.arrTest after 2 = %@",obj1.arrTest);

    [obj1 release];
}

出力は次のとおりです。

コンソール出力

ここでは、読み取り専用であっても NSMutableArray にメモリが割り当てられる理由が 1 つわかりません。そして、なぜこの読み取り専用配列に文字列が追加されているのか。

KVCも使用してNSStringでこのメモリ割り当てテストを行い、同じ結果を得ました。KVC を使用して値が読み取り専用文字列に設定されました。

これは、読み取り専用プロパティの setValue に関する私の混乱です。

それで、読み取り専用プロパティについて何か誤解していますか? それとも何か他のことが起こっていますか?

4

1 に答える 1