[英]Presenting a non-arc ViewController from within an arc ViewController
[英]convertion of a class to arc from non-arc
大家好,
@property (nonatomic, assign) NSInteger myindex;
执行转换为目标 C ARC 后,此行更改为unsafe_unretained任何人都可以对此进行解释。
_unsafe_unretained 是一个变量限定符。
__unsafe_unretained 指定一个引用,该引用不会使被引用的对象保持活动状态,并且在没有对该对象的强引用时不设置为 nil。 如果它引用的对象被释放,则指针悬空。
简单地说,如果你使用这个限定符,它不会为你做任何保留,并且当没有其他对象保留它时,它不会自动将它的引用设置为 nil。
首先,有问题的变量是原始类型( NSInteger
,如CGFloat
、 float
等)。 所以像__weak
、 __strong
、 __unsafe_unretained
这样的变量限定符对它们没有影响。 所以下面的代码没有危险。
@property (nonatomic, assign) NSInteger myindex;
现在,如果在其他一些部分,您有一个非原始类型,如 NSString、UIImage 等,带有这个限定符,那么您必须确保在整个使用过程中保留该变量,并在之后释放它们。
在您的情况下,它不会更改为unsafe_unretained
因为它是一个标量值。 可能你这样写:
@property (nonatomic, assign) NSInteger *myindex;
这就是它转换为unsafe_unretained
的原因。
在 ARC 中assign
实际上是unsafe_unretained
。
对于int
、 float
等标量值。 您可以使用assign
本身。 对于对象,您可以使用weak
或unsafe_unretained
,这取决于上下文。
unsafe_unretained
和weak
防止对象的保留,但方式略有不同。
weak
指针的对象当对象被释放,将转换到零。unsafe_unretained
将继续指向对象所在的内存,即使在它被释放之后也是如此。 由于访问该释放的对象,这可能导致崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.