合成存储方法,局部/全局变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合成存储方法,局部/全局变量相关的知识,希望对你有一定的参考价值。

 

--------合成存取方法--------

 

  • Objective-C从 OC 2.0版本开始,自动合成了setter 方法和 getter 方法。而且,如果开发者需要自己控制某个setter 方法和 getter 方法的实现时,可以自己提供 setter 方法和 getter 方法,自己提供的setter 方法和 getter 方法会覆盖系统自动合成的相应方法。
  • 需要编译器自动合成 setter 方法和 getter 方法需要在需要生成方法的属性面前加上 @property (必须)  和 @synthesize(可以省略) 指令。(例: @property int numerator;    @synthesize numerator = _numerator;  // =_numerator  可以省略)
  • 其实并不需要使用 @synthesize  指令,使用 @property 指令就足够了。编译器会自动为你生成 setter 和 getter 方法。但是,注意,如果你不使用  @synthesize 那么编译器生成的实例变量会以下划线(_)字符作为其名称的第一个字符。
  • 使用合成存取方法,属性名称的前面不要以 new 、alloc 、copy 或者 init 这些词开头。这与编译器的一些假定有关。

 

/*  @property 可以使用的一些指示符

 

 1.readonly:系统只合成getter方法,不再合成setter方法。

 

 2.readwrite:系统合成getter和setter方法,默认是这样。

 

 3.strong:指示符指定该属性对被赋值对象持有强引用(只要该强引用指向被赋值的对象,那么该对象就不会被自动回收)。多用在 其他对象(除代理\UI控件\字符串以外的对象)

 

 4.week:指示符指定该属性对被赋值对象持有弱引用(即使该弱引用指向被赋值的对象,该对象也可能被回收)。多用在 代理\UI控件

 

 5.unsafe_unretained:类似于week,不同是指针所引用的对象回收之后,该指针不会被赋值为nil,该指示符极少用。

 6.copy : 多用在字符串类型

7.assign : 多用在非对象类型(基本数据类型int\float\BOOL\枚举\结构体)

 

 */

 

 

 

 

 

 

--------局部变量和全局变量--------

 

  • 局部变量:在还是内部定义的变量
    • 作用域:从定义变量开始,到代码块结束
    • 生命周期:定义开始到代码块结束,就会被回收
    • 函数的形参也是局部变量
    • 无固定初值
    • 局部变量没有记忆力。方法内定义的局部变量只会在方法内有效,当方法返回时,这些变量的值都消失了。每次调用方法时,该方法内的局部变量(如果有的话)都是用变量声明重新初始化一次。(等于重新分配了一块存储数据的内存空间,以前局部变量所拥有的空间已经被回收、销毁,不会再次拥有)
  • 全局变量:函数外面定义的变量
    • 作用域:定义开始到文件结尾(能被后面所有函数共享)
    • 生命周期:程序一开始就分配内存,到程序退出才销毁
    • 默认的初值为0
    • 全局变量有自己的记忆力
  •   static  关键字:
    • 在变量声明前加上 static 关键字,可以使局部变量保留多次调用一个方法所得的值。(即 存储数据的内存空间不会被回收与销毁,会记录下局部变量所拥有的数据,在下一次需要这个局部变量时将会返回唯一的存储数据的内存地址,和原有的数据)

 

以上是关于合成存储方法,局部/全局变量的主要内容,如果未能解决你的问题,请参考以下文章

android如何从本地变量存储在全局变量

全局局部变量,数据的存储类别

Java 基本数据类型作为局部变量存储在哪

全局变量和局部变量的区别

函数的局部变量和全局变量变量的存储类别

全局变量和局部变量