ios开发备忘录五

调了半个晚上终于解决了一个及其蛋疼的问题,或者自己对oc中的@property和@synthesize理解还是不够透彻,在写一个和coredata的核心模块的时候这样写

@implementation

@synthesize managedObjectContext = _managedObjectContext;

@end

然后再后面调用的时候直接用的_managedObjectContext来代替self.managedObjectContext;

但是发现运行起来总是有异常,nsinternalinconsistencyexception +entityForName: could not locate an NSManagedObjectModel for entity name 'XXX' 

估摸着是没有初始化,后来反复调试终于是有点理解

@synthesize managedObjectContext = _managedObjectContext;

这句话的真谛了

_managedObjectContext固然可以代替self.managedObjectContext来访问我们想要的那块内存区域,但是如果是第一次当self.managedObjectContext仍然是空指针的时候,_managedObjectContext也应该是控制针,而且oc2.0赋予了点操作神奇的能力,就是实际上调用的是用@synthesize自动生成的或者我们自己重写的setter和getter函数,所以在第一次初始化的时候必须要调用self.managedObjectContext来进行初始化,因为我已经重写了getter函数并且在getter函数中对self.managedObjectContext指针初始化了内存区域,在初始化之后那么使用_managedObjectContext和self.managedObjectContext应该是全凭心情了

你可能感兴趣的:(ios开发备忘录五)