tho*_*mas 1 iphone core-data objective-c
CoreData属性的setter是否保留?或复制价值或什么是二传手?我想知道是否必须(自动)释放我放入setter的值.
我已经做了一些快速测试.假设以下型号:
+----------+
| Class A |
+----------+
| v :int32 |
+----------+
Run Code Online (Sandbox Code Playgroud)
生成的ManagedObject然后如下所示:
//A.h
@interface A : NSManagedObject
{
}
@property (nonatomic, retain) NSNumber * v;
//...
//A.m
@implementation A
@dynamic v;
...
Run Code Online (Sandbox Code Playgroud)
好的,属性标记为retain,因此如果我将NSNumber设置为v,则应保留NSNumber.但它不是(我认为).我做了以下事情:
A *a = ... ;
NSNumber *retainCheck = [[NSNumber alloc] initWithInt:23];
NSLog(@"retainCheck1: %i",[retainCheck retainCount]);
a.v = retainCheck;
NSLog(@"retainCheck2: %i",[retainCheck retainCount]);
NSLog(@"retainCheck3: %i",[a.v retainCount]);
NSLog(@"pointer1: %#x",retainCheck);
NSLog(@"pointer2: %#x",a.v);
Run Code Online (Sandbox Code Playgroud)
这会产生以下输出:
retainCheck1: 1
retainCheck2: 1
retainCheck3: 1
pointer1: 0x62f068
pointer2: 0x62f068
Run Code Online (Sandbox Code Playgroud)
两个NSNumber都是相同的NSNumber实例(相同的指针值 - >所以它没有复制或类似的那样),并且设置器似乎不保留NSNumber.
我做的...... 我的测试错了吗?或者NSManagedObject-setters的行为与标题中描述的不一样?
编辑:我正在调用retainCount,因为我想观察一个保留不释放或自动释放.观察到的行为可以通过Abizern链接的flyweight模式来解释
您不应该关心Core Data对象如何管理它的内存,只要相信它会正确地执行它.查看对象的保留计数很少有用,因为它可以根据Cocoa SDK中的许多内容进行更改.
所有你需要做的是确保了每次通话时间alloc,retain,new或者copy在你的代码,它是某处有平衡autorelease或release.
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |