ここで私の混乱を説明しようとしています。この質問に修正が必要かどうか教えてください。
したがって、セッターが作成されないため、読み取り専用プロパティに値を設定することはできません。しかし、これをテストするためのデモ プロジェクトを作成しました。私のコードサンプルをあなたと共有しています。
「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 に関する私の混乱です。
それで、読み取り専用プロパティについて何か誤解していますか? それとも何か他のことが起こっていますか?