Objective-C学习日志1

来源:互联网 发布:网络调查赚钱 编辑:程序博客网 时间:2024/05/15 23:34
1. 两次调用NSLog,系统自动加入换行符;

2. 类名以大写字母开头,实例变量,对象,方法都以小写字母开头;

3. 方法中,如果返回值为void,则不需要return语句,或者使用不带任何值的"return;"语句;

4. [类名  alloc  ] ;alloc方法保证对象的所有实例变量都变成初始状态,但这并不意味着该对象已经进行了适当的初始化,在创建对象(用alloc方法分配了空间)之后,还必须对它初始化(调用init方法);

5. Fraction *myFraction;   *表示myFraction是Fraction对象的应用(或指针),myFraction存储的实际上是一个引用(内存地址),而且在声明语句中,这个内存地址是未定义的,只有当myFaction=[Fraction  alloc];之后,alloc方法在内存中保留一段足够空间,调用alloc方法,会返回内存地址给myFraction;

6. 概念: 关于实例变量值(设值方法setter,取值方法getter),统称为访问器方法(accessor);

7. 说明:接口文件(头文件)包含类的公开信息,即能够与这个类的使用者共享的一些信息,实现部分包含的是私有信息,即实例变量和代码;

8. @property  属性标识指令,用在@interface部分,也使得在程序其他文件中类的使用者在使用此类时知道可以通过存取方法访问实例变量(通常,实例变量声明在@implement部分,而当实例变量标识为属性时,则不用再@implement中重复声明变量,但需要在@implement中使用@synthesize指令生成存取方法);

9. 点运算符访问属性:对于已经被标识为属性的实例变量,在程序其他地方访问这些变量时,有
int num1=[myFraction  numerator] 等价于  num1=myFraction.numerator,
[myFraction  setNumerator:5]          等价于  myFraction.numerator =5;
前者是标准的变量访问方法格式,后者的点运算符等价用法只适用于严格格式下的取值和设值方法(注:点运算符主要使用于实例变量存取值的访问,可根据语境识别是设值或取值,在使用点运算符时,必须保证实例变量标识为属性,或者按严格格式自定义了存取值方法,此处所说的严格格式可能是指的是要与属性生成方法的名字,方法实现赋值代码,return等都一致);

10. 不带参数名的方法:创建方法名时,当有多个参数时,可以省略参数的名字(只要有一个能唯一区分该方法的名字即可),如-(void) setNumerator:(int)n  Denominator:(int)d]  可以直接命名为 -(void) set :(int)n :(int)d;

11. 局部对象变量默认初始化为nil(nil是一个对象指针,为空)

12. oc中实例变量不同于局部变量,在多次调用时保持自己的值。 (实例变量的生存周期??)

13. 方法的参数:参数若是基本数据类型,则不影响实参,如传递的是对象,则可修改对象的实例变量值,因为对象是一种指针,传递的是数据存储地址;

14. 对于声明为static的静态变量,只在程序开始执行时初始化一次,注(我的猜想):
static int count=3;在程序第一次执行此语句时给count赋初值为3,当程序再次执行到这个位置时,这个语句应该会被忽略掉,cout 从3开始且以后都有记忆能力,,若是static int count; count=3;将count声明与初始化赋值分开,则达不到记忆的效果,因为程序在默认count初始为0后,以后会略掉static开头的static int count;语句,但不会略掉cout=3;这条语句;所以若想要用static关键字使变量有记忆效果,则应把变量声明和初始化放在一条语句里;

15. 局部静态变量和实例变量的区别:OC中方法中声明的static变量为局部静态变量(也可以是所有方法之外,@implement之内的局部静态变量,此处讨论的则是方法中的static变量),OC中在@interface或@implement中用{}包含声明的变量为实例变量(有的说法表示,{}中包含的为成员变量,实例变量是除了基本数据类型外的成员变量);(以下属个人理解)实例变量不同于局部变量(局部变量在block{}作用完后就被销毁掉),实例变量也不同于静态变量(静态变量在程序结束后才会被销毁,生命周期是整个程序执行期),实例变量的生命周期介于两者之间,只有在对象被销毁后,此对象对应的一套实例变量才会被销毁(至于对象的生命周期,后期再深究);实例变量和局部静态变量在使用效果上也有很大不同,这也决定了两者有不同的用途,下面举一个例子,在某类中建一个count方法 :
@implement
-(int) counter{ static int count=0;count++; return count;}
这里用到的是count局部静态变量,对于此类的所有不同实例对象在调用这个方法时,都是公用count这一个变量,若是将count声明为实例变量:
@implement
{ int count;} 
-(int) counter{ count++; return count;}
则此类的不同对象都拥有自己的count实例变量,当调用counter方法时, 各个对象的count统计的是各个counter方法的使用次数;
总结得出,静态局部变量是此类所有对象公用的只有一个,生存周期是整个程序执行周期;而实例变量是每个对象都拥有一个,生存周期是所属对象的生存周期;






0 0
原创粉丝点击