Ios objc_autoreleaseReturnValue和objc_RetainatoreReturnValue如何工作?

Ios objc_autoreleaseReturnValue和objc_RetainatoreReturnValue如何工作?,ios,objective-c,automatic-ref-counting,Ios,Objective C,Automatic Ref Counting,我读过一本名为“Pro multithreading and memory management for iOS and OS X”的书,书中有线程本地存储的内容。一般的意思是,如果类方法的返回值在外部有一个retain操作: 在类方法内的objc_autoreleaseReturnValue中未调用Autorelease。 在类方法之外的objc_retainAutoreleasedReturnValue内未调用Retain。 为了使对象不会被推入自动释放池,对象将由线程本地存储保存。 我写的

我读过一本名为“Pro multithreading and memory management for iOS and OS X”的书,书中有线程本地存储的内容。一般的意思是,如果类方法的返回值在外部有一个retain操作: 在类方法内的objc_autoreleaseReturnValue中未调用Autorelease。 在类方法之外的objc_retainAutoreleasedReturnValue内未调用Retain。 为了使对象不会被推入自动释放池,对象将由线程本地存储保存。 我写的代码和这本书一样,但我在autoreleasePool中找到了这个对象,所以我想问一下发生了什么

在Xcode 9下测试——在模拟器和macOS本身上,magic autoreleaseReturnValue/RetainUserReleaseReturnValue似乎不像预期的那样绕过了池

在实际的iOS设备上,它似乎可以像您预期的那样工作

在Xcode 9下测试——在模拟器和macOS本身上,magic autoreleaseReturnValue/RetainUserReleaseReturnValue似乎不像预期的那样绕过了池

在实际的iOS设备上,它似乎可以像您预期的那样工作