阅读本节后感到迷失:A Non-Object Attribute
根据上面链接中包含的基本方法,在处理"瞬态属性" 时,我的自定义代码中应该有2个属性:
第一个属性,用于实际需要(不支持)的自定义类型=> 瞬态属性
第二个属性,用于阴影表示(具体支持)type => 持久属性
...
我的阅读非常愉快,直到达到" 非对象属性"这部分让我深感困惑,如下所述:
...实现实体的自定义类时,通常会为属性添加实例变量。 ... “好吧,我可以遵循这个......让iVar变得没什么大不了的”
如果使用实例变量来保存属性,则还必须实现原始的get和set访问器 “好的,我知道如何做原始访问者。为什么需要他们?因为MO中的内部优化存储可以有效地使用,我想。“
@interface MyManagedObject : NSManagedObject
{
 NSRect myBounds; // I assume this suppose to be the **transient attribute**
}
@property (nonatomic, assign) NSRect bounds; // I assume this is the **persistent attribute**
@property (nonatomic, assign) NSRect primitiveBounds; // because complier forces me to implement below primitive-accessors ?
@end
- (NSRect)primitiveBounds
{
return myBounds; // accessing iVAR storage for **transient attribute**? I hope so
}
- (void)setPrimitiveBounds:(NSRect)aRect
myBounds = aRect; // accessing iVAR storage for **transient attribute**? I hope so
}
从这里下来,我有......太多?????????????未解
- (NSRect)bounds
{
[self willAccessValueForKey:@"bounds"]; //KVO notice of access **persistent attribute**, I guess
NSRect aRect = bounds; //will this invoke primitive-Getter ???
[self didAccessValueForKey:@"bounds"];
if (aRect.size.width == 0) //bounds has not yet been unarchived, Apple explained
 {
NSString *boundsAsString = [self boundsAsString]; // unarchiving pseudo method, I guess
if (boundsAsString != nil) //if that value is not nil, transform it into the appropriate type and cache it...Apple explained.
{
bounds = NSRectFromString(boundsAsString); //will this invoke primitive-Setter???
}
}
return bounds;
}
我把最后的问题列表放在这里:
1, STILL 是否需要有2个属性来处理NON-Object-Attribute,瞬态属性和持久属性?
2,iVar" myBounds"表示/连接" @property bounds"?这是" @property界限" MOM中的建模属性?
3,这里实现原始访问器的目的是什么?为了强制我写KVO(会......做...)方法对吗?用于在iVar" myBounds"和#34; @property bounds"之间传递值(进出)?4,在这行代码中
bounds = NSRectFromString(boundsAsString); //will this invoke primitive-Setter???
是原始的Setter被称为OR public / standard-Setter被称为?为什么呢?
答案 0 :(得分:1)
在iOS中,有非常方便的NSStringFromCGRect
和CGRectFromNSString
功能。为什么不直接使用它们并存储字符串?
您的问题:
primitiveX
的{{1}}名称会自动生成/解释。