Dav*_*ren 4 core-data objective-c
我有一个带有+initialize方法的托管核心数据对象.(如果重要的话,我希望使用该方法初始化一个设置成本昂贵的静态变量.)在测试初始化代码时,我惊讶地发现该+initialize方法被调用了两次.
initialize被调用的第一次被self定义为(Class) MyClass,正如我所期望的那样.
第二次initialize被调用self被定义为(Class) MyClass_MyClass_,这使我怀疑Core Data托管对象的某种异常初始化.
虽然这对我来说不会造成问题(我可以测试一下静态变量是否已经初始化,无论如何我都会做,处理ubclassing),但这让我怀疑Core Data是在对象中做了什么或类生命周期,我不明白.有人可以向我解释这个MyClass_MyClass_ +initialize方法调用中发生了什么吗?
Core Data属性的访问器方法是在运行时动态创建的.这通过创建子类MyClass_MyClass_(of MyClass)并将必要的方法添加到子类来实现.
Core Data也做了一些技巧来隐藏你的实体的对象实际上是子类的实例的事实:
e = [NSEntityDescription insertNewObjectForEntityForName:@"MyClass" inManagedObjectContext:context];
NSLog(@"%@", [e class]); // --> MyClass
NSLog(@"%s", object_getClassName(e)); // --> MyClass_MyClass_
Run Code Online (Sandbox Code Playgroud)
如果您没有为实体设置自定义类,可能会更加明显.在那种情况下,输出是
NSLog(@"%@", [e class]); // --> NSManagedObject
NSLog(@"%s", object_getClassName(e)); // --> NSManagedObject_MyClass_
Run Code Online (Sandbox Code Playgroud)
所以e"看起来像"一个实例NSManagedObject,但实际上是一个动态创建的子类的实例NSManagedObject_<EntityName>_.此子类实现所有访问器方法(对于此实体是唯一的).
| 归档时间: |
|
| 查看次数: |
503 次 |
| 最近记录: |