Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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 目标C:@属性声明和实例变量声明_Objective C_Ios5_Automatic Ref Counting - Fatal编程技术网

Objective c 目标C:@属性声明和实例变量声明

Objective c 目标C:@属性声明和实例变量声明,objective-c,ios5,automatic-ref-counting,Objective C,Ios5,Automatic Ref Counting,虽然这个问题很基本,但我发现理解IOS编程非常关键。有时我们只声明实例变量,而不为其设置任何相关属性。有些情况下,我们只需声明属性并使用合成来获取或设置值。有时,当编译给我警告时,我觉得有必要在代码中声明这两者!在Objective C中操纵属性的基本原理是什么?我知道为任何实例变量创建getter和setter的基本要求,但是什么时候? 我已经看过很多次了,我们根本不使用属性,在那之后我们也很容易设置和获取变量的值。另外,不同类型的属性,如原子性、非原子性、强性、保留性对我来说都非常不清楚。升

虽然这个问题很基本,但我发现理解IOS编程非常关键。有时我们只声明实例变量,而不为其设置任何相关属性。有些情况下,我们只需声明属性并使用合成来获取或设置值。有时,当编译给我警告时,我觉得有必要在代码中声明这两者!在Objective C中操纵属性的基本原理是什么?我知道为任何实例变量创建getter和setter的基本要求,但是什么时候?
我已经看过很多次了,我们根本不使用属性,在那之后我们也很容易设置和获取变量的值。另外,不同类型的属性,如原子性、非原子性、强性、保留性对我来说都非常不清楚。升级到4.2的XCODE动摇了我关于内存管理的概念。有人能帮我扫清心中的迷雾吗?

与直接ivar访问相比,属性始终是首选方式,主要原因如下:

  • 可以重写子类中的getter或setter
  • 您可以定义“分配行为”(即
    copy
    assign
    retain/strong
  • 您可以同步ivar访问
关键词:

  • 复制
    :设置后,对象将复制到ivar
  • assign
    :对象的指针在设置时分配给ivar
  • retain/strong
    :对象保留在集合中
  • weak
    :在ARC中,这类似于assign,但在实例被释放时会自动设置为
    nil
    ,也用于垃圾收集环境
  • 非原子的
    :访问器不是
    @同步的
    (线程安全),因此速度更快
  • 原子的
    :访问器是
    @同步的
    (线程安全的),因此速度较慢

一般来说,你应该始终合成ivar。如果出于性能原因需要更快的访问,您也可以直接访问合成的ivar。

在键入时,我发现“Erik Aigner”的速度更快,回答也很好

有关属性、合成和自定义setter的示例,请参见堆栈上的我的答案:

有关ARC的stater教程,请参见Ray wenderlich网站上的解释:


查看本网站的精彩教程。我从本网站学到了很多概念。所有关键字的小定义都非常有用……谢谢:)如果这有帮助,你应该单击Erik答案旁边的复选标记(勾选)来奖励他