Iphone 类从非弧到弧的转换

Iphone 类从非弧到弧的转换,iphone,ios,Iphone,Ios,大家好 执行到目标C的转换后,该行变为不安全的未恢复的。有人能解释一下吗。\u不安全的未恢复是一个变量限定符 从 __unsafe_unretained指定一个引用,该引用不保持被引用对象的活动状态,并且在没有强 对对象的引用。如果它引用的对象已解除分配, 指针悬空着 简单地说,如果您使用这个限定符,它不会为您执行任何retain操作,当没有其他对象保留它时,它也不会自动将其引用设置为nil 编辑:在看到评论之后 首先,所讨论的变量是一个基本类型(NSInteger,如CGFloat,float

大家好


执行到目标C的转换后,该行变为不安全的未恢复的。有人能解释一下吗。

\u不安全的未恢复是一个变量限定符

__unsafe_unretained指定一个引用,该引用不保持被引用对象的活动状态,并且在没有强 对对象的引用。如果它引用的对象已解除分配, 指针悬空着

简单地说,如果您使用这个限定符,它不会为您执行任何retain操作,当没有其他对象保留它时,它也不会自动将其引用设置为nil

编辑:在看到评论之后 首先,所讨论的变量是一个基本类型(
NSInteger
,如
CGFloat
float
等)。因此,变量限定符如
\uuu弱
\uu强
\uu不安全的
对它们没有影响。所以下面的代码中没有危险

@property (nonatomic, assign) NSInteger myindex;

现在,如果在其他一些部分中,您有一个非原语类型,比如NSString、UIImage等,使用此限定符,那么您必须确保在整个使用过程中保留该变量,并在之后释放它们

在您的情况下,它不会变为
不安全\u未恢复
,因为它是一个标量值。 也许你写的是:

@property (nonatomic, assign) NSInteger myindex;
这就是它转换为
不安全\u未恢复的原因

在ARC中,分配实际上是不安全的

对于标量值,如
int
float
。您可以使用
assign
本身。 对于可以使用
不安全_未恢复
的对象,它取决于上下文

不安全\u未恢复
防止对象保留,但方式略有不同

  • 对象解除分配时,指向该对象的指针将转换为nil
  • unsafe_unretained
    将继续指向对象所在的内存,即使在对象被解除分配后也是如此。这可能会由于访问解除分配的对象而导致崩溃

这是一种基本类型。它应保持为
assign
。同意。弱/强/等的其他属性对于基元类型没有意义。由于默认情况下是赋值的,所以它甚至不是必需的。正如该文档所说,“对于标量类型,如
NSInteger
CGRect
,使用该属性[
assign
”,通常用
weak
替换
assign
(或者如果您支持iOS 5之前的版本,
不安全_unretained
),这是合乎逻辑的,但是在标量类型的上下文中,这是没有意义的。保留标量
assign
或完全忽略setter语义。因此,是的,
assign
是给
弱的
/
不安全的
,就像
保留
是给
强的
一样,但这对标量来说毫无意义。保留它们
assign
或完全忽略限定符。@lochana您是说自动圆弧转换工具将其从
assign
更改为
unsafe\u unrepained
?如果是这样,属性是否真的定义为
@property(非原子,assing)NSInteger*myindex?换句话说,这个属性真的定义为NSInteger指针吗?当你在问题中发布代码时,你忘记了星号?如果不是这样,圆弧转换进行这样的更改是没有意义的(属性设置为指针可能是一个错误)。Lochana:请不要接受错误的答案。你可以简单地检查“否决票数”,这会误导所有SO用户。谢谢,但你能告诉我这会在我的代码中造成任何危险吗?比如说,如果我跨类使用此变量,对不起,如果这是一个非常基本的问题,因为我是一名兼职ios程序员
@property (nonatomic, assign) NSInteger *myindex;