Non ho ancora i privilegi di commento, ma per aggiungere alla risposta di @ Costique, c'è un attributo aggiuntivo Valore di tipo "V" che è il nome di IVar a cui una proprietà può essere associata (via sintetizza). Questo può essere facilmente scoperto con questo
@interface Redacted: NSObject
@property (atomico, di sola lettura) int foo;
@end
@implementation Redacted
@synthesize foo = foobar;
@end
// for all properties
unsigned propertyCount = 0;
objc_property_t *properties = class_copyPropertyList([object class], &propertyCount);
for (int prop = 0; prop < propertyCount; prop++)
{
// for all property attributes
unsigned int attributeCount = 0;
objc_property_attribute_t* attributes = property_copyAttributeList(property, &attributeCount);
for (unsigned int attr = 0; attr < attributeCount; attr++)
{
NSLog(@"Attribute %d: name: %s, value: %s", attr, attributes[attr].name, attributes[attr].value);
}
}
2013-07-08 13: 47: 16.600 Redacted5162: 303] Abilità 0: nome: T, valore: i
2013-07-08 13 : 47: 16.601 Redacted [5162: 303] Attributo 1: nome: R, valore:
2013-07-08 13:47:16.602 Redacted [5162: 303] Attributo 2: nome: V, valore: fooBar
fonte
2013-07-08 21:00:14
Un'idea ammirevole, ma su questa strada giace la follia. Potrai reinventare la ruota (i dati principali forniscono già un'eccellente persistenza basata sul modello) e il sistema di proprietà * non * è progettato per essere la base per qualsiasi tipo di persistenza automatizzata. Il risultato finale sarà terribilmente fragile e sarà un dolore completo da scrivere in primo luogo, dati i capricci dei tipi di dati C. – bbum
Nonostante la mia upvote sulla "proprietà per favore" rispondi di seguito ... QUESTO è quando devi andare ad apprendere i Core Data. Seriamente, ne varrà la pena. Non è per i principianti ma IMO una volta che inizi a fare cose come hackerare il runtime objc è il momento di leggere quegli strani documenti e farti girare la testa nel modo giusto. :) – buildsucceeded
@buildsucceeded So come utilizzare i dati principali. È un'ottima soluzione quando si tratta di un progetto di medie/grandi dimensioni che richiede dati relazionali. Ma quando si tratta di un progetto molto piccolo in cui tutto ciò che serve per serializzare un singolo oggetto per mantenere lo stato dell'applicazione, è un over-kill per usare i core-data. Inoltre, ho usato questa soluzione per altri scopi come Object-To-Dictionary-Serialization e DI Framework – aryaxt