Gre*_*reg 16 iphone objective-c nsnumber ios
如何在objective-c中设置NSNumber变量的值(不创建新对象)?
背景
ugh*_*fhw 16
NSNumber对象不可变.这意味着更改包含NSNumber的属性的唯一方法是为其提供新的NSNumber.要做你想做的事,你有三个选择:
1.将Core Data对象传递给方法,并直接设置属性.
- (void)updateNumberOf:(MyCoreDataObject *)theObject {
NSNumber *newNumber = ...; // create new number
theObject.number = newNumber;
}
Run Code Online (Sandbox Code Playgroud)
被称为 [self updateNumberOf:theCoreDataObject];
2.让update方法返回一个新的NSNumber并在调用者中更新它.
- (NSNumber *)updateNumber:(NSNumber *)oldNumber {
NSNumber *newNumber = ...; // create new number
return newNumber;
}
Run Code Online (Sandbox Code Playgroud)
叫做使用:
NSNumber *theNumber = theCoreDataObject.number;
theNumber = [self updateNumber:theNumber];
theCoreDataObject.number = theNumber;
Run Code Online (Sandbox Code Playgroud)
3.将一个指针传递给一个数字变量并在调用者中更新它(如果你需要返回别的东西,我只会建议选项2).
- (void)updateNumber:(NSNumber **)numberPointer {
if(!numberPointer) return; // or possibly throw an error
NSNumber *oldNumber = *numberPointer;
NSNumber *newNumber = ...; // create new number
*numberPointer = newNumber;
}
Run Code Online (Sandbox Code Playgroud)
叫做使用:
NSNumber *theNumber = theCoreDataObject.number;
[self updateNumber:&theNumber];
theCoreDataObject.number = theNumber;
Run Code Online (Sandbox Code Playgroud)
在任何这些例子中我都不打扰内存管理.确保适当地释放/自动释放对象.
4.(来自Greg的评论)与选项1类似,但是将密钥传递给更新方法以使其更具可移植性.
- (void)updateNumberOf:(id)theObject forKey:(NSString *)key {
NSNumber *oldNumber = [theObject valueForKey:key];
NSNumber *newNumber = ...; // create new number
[theObject setValue:newNumber forKey:key];
}
Run Code Online (Sandbox Code Playgroud)
被称为 [self updateNumberOf:theCoreDataObject forKey:@"number"];
| 归档时间: |
|
| 查看次数: |
13352 次 |
| 最近记录: |