Objective-C 中 passRetained 和 passUnretained 的区别
passRetained 和 passUnretained 是 Objective-C 中用于处理 ARC(Automatic Reference Counting)的两个宏。
- passRetained: 这个宏用于传递一个对象的所有权,将对象的引用计数加 1。这意味着在调用 passRetained 宏后,调用者需要负责释放这个对象,以避免内存泄漏。通常在将一个对象传递给一个需要所有权的方法或函数时使用。
例如:
NSString *str = [[NSString alloc] initWithString:'Hello'];
someMethod(passRetained(str));
在上面的例子中,通过 passRetained 宏传递了一个字符串对象给 someMethod 方法,并且将其所有权转移给了 someMethod 方法。调用者需要负责在适当的时候释放这个对象。
- passUnretained: 这个宏用于传递一个对象的引用,但并不改变对象的引用计数。这意味着在调用 passUnretained 宏后,调用者不需要负责释放这个对象。通常在将一个不需要所有权的对象传递给一个方法或函数时使用。
例如:
NSString *str = 'Hello';
someMethod(passUnretained(str));
在上面的例子中,通过 passUnretained 宏传递了一个字符串对象给 someMethod 方法,但是并没有改变对象的引用计数。调用者不需要负责释放这个对象。
总结: passRetained 用于传递对象的所有权,需要调用者手动释放对象。 passUnretained 用于传递对象的引用,不需要调用者手动释放对象。
原文地址: https://www.cveoy.top/t/topic/qj6y 著作权归作者所有。请勿转载和采集!