Ich versuche hier meine Verwirrung zu beschreiben. Lassen Sie mich wissen, wenn diese Frage irgendeine Änderung benötigt.Ist es möglich, den Wert auf Readonly-Eigenschaft mit KVC in iOS zu setzen?
Accordind Apple documentaition:
So können wir nicht gesetzt Wert Readonly-Eigenschaft, weil es Setter ist nicht erstellt. Aber ich habe ein Demo-Projekt zum Testen erstellt. Ich teile meine Code-Probe mit Ihnen.
Dies ist die Klasse "ModelTest1.h". Es hat eine schreibgeschützte Eigenschaft.
#import <Foundation/Foundation.h>
@interface ModelTest1 : NSObject
@property (readonly) NSMutableArray *arrTest;
@end
Jetzt setze ich Wert mit KVC. Da diese Eigenschaft schreibgeschützt ist, sollte es mir zur Laufzeit einen Fehler geben, aber es passiert nicht.
- (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];
}
Ausgang ist:
ich nicht eine Sache, hier bin immer, warum wird der Speicher in NSMutableArray zugewiesen bekommen sogar nur lesbar ist. Und warum eine Zeichenfolge in diesem Readonly-Array hinzugefügt wird.
Ich habe diesen Speicherzuweisungstest mit NSString auch mit KVC und bekam das gleiche Ergebnis. Wert wurde auf schreibgeschützte Zeichenfolge mit KVC festgelegt.
Dies ist meine Verwirrung in Bezug auf SetValue für Readonly Eigenschaft.
Also habe ich etwas über Readonly-Eigenschaft missverstanden? oder ist da noch etwas anderes?
Dank matt für so schnelle Antwort. Es löscht meine Verwirrung. Danke noch einmal! –
Sie sind herzlich willkommen. Der Punkt, den du machst, wird ziemlich laut in meinem Buch genannt: http://www.apeth.com/iOSBook/ch12.html#_key_value_coding_2 – matt
Ich habe mir dein Buch angesehen und ich muss sagen, dass es wirklich beeindruckend ist. Ich werde es definitiv studieren. Vielen Dank! –