Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 管理传入到in-out参数的对象的内存_Objective C_Cocoa_Key Value Coding - Fatal编程技术网

Objective c 管理传入到in-out参数的对象的内存

Objective c 管理传入到in-out参数的对象的内存,objective-c,cocoa,key-value-coding,Objective C,Cocoa,Key Value Coding,我想知道,对于用于将值传递到方法并(可选地)从方法返回更新值的方法参数,必须如何进行内存管理 例如,KVC中的-validate:error:方法具有可由该方法更新的(id*)ioValue参数。您可以返回一个自动释放的对象,但是更新时应该如何处理输入对象?对于这种情况有什么约定吗?用新对象替换对象引用并没有什么特别复杂的地方,就像使用nil引用并在首次创建对象时使其有效一样 如果您使用的是ARC,那么编译器将意识到旧引用已被替换,就像在任何其他情况下一样。如果使用MRR,则需要遵守正常的ret

我想知道,对于用于将值传递到方法并(可选地)从方法返回更新值的方法参数,必须如何进行内存管理


例如,KVC中的
-validate:error:
方法具有可由该方法更新的
(id*)ioValue
参数。您可以返回一个自动释放的对象,但是更新时应该如何处理输入对象?对于这种情况有什么约定吗?

用新对象替换对象引用并没有什么特别复杂的地方,就像使用
nil
引用并在首次创建对象时使其有效一样


如果您使用的是ARC,那么编译器将意识到旧引用已被替换,就像在任何其他情况下一样。如果使用MRR,则需要遵守正常的
retain
/
release
约定,以避免内存泄漏。

如果要更新对象而不是创建对象,则不存在内存管理问题?对象已分配,您正在修改它的一个属性。当您完全替换输入对象时,我考虑的是不同的场景。仅仅更新输入对象就意味着对象是作为in参数传递的,而不是作为in-out传递的。请看一看-validate:error:或validateValue:forKey:error:NSKeyValueCoding协议的方法说明。@yurish-有关此问题的详细信息,请参阅此问题:我必须自己理解:)因此,在调用此方法时必须格外小心,并假设传入的参数可能会更改。