OC-学习Tips

(Objective-C)

  13,多参数方法:(函数名:f::)

  参数能够在 : 前面设置一个标签label,标签label也是函数名的一部分,方便阅读(不带标签实际上也有个匿名标签),第一个参数不能有标签,实际上函数名就是第一个参数的标签。

  14,OC不是严格的函数重载(和C++不同),主要看标签中,函数名和参数数量是否相同,不是看参数类型,如:

  - (int)g:(int)x;

  - (int)g:(flota)x;  //错误,方法冲突了

  - (int)g:(int)x:(int)y;  //正确,两个匿名标签

  - (int)g:(int)x andY:(int)y;  //正确,第二个标签为andY

  15,Message 消息机制(函数-消息-方法)

  发送消息:[obj message] 或 obj.message

  OC在.h文件中定义的所有函数都是public的,OC通过categories来实现函数私有化(或不在头文件中声明而去.m文件中直接实现)

  16,凡是以initXXXX开头的都是构造函数,如:

  - (id)init;

  - (Dog *)initWith;

  17,NSLog 和 printf 都会在console中输出显示结果,不同的是,前者传递进去的格式化字符是NSString的对象,而不是char * 这种字符串指针。

  18,OC中的类由接口和实现两部分组成:接口部分声明类中的实力变量和功能,接口部分实现接口中的功能。

  19,OC中,类的对象无法声明在栈中,只能声明在堆里。

  20,alloc / new ,一个对象在堆中开辟了空间,栈中有一个对象地址,先有类还是先有对象,看站的角度。

  21,类的封装,封装成员变量,成员方法,subclass基类

  22,构造方法:(类的封装)

  (1)在一般语言中,在创建对象时自动调用的方法称为构造方法。

  (2)在OC中,方式用init开头的成员方法都是构造方法。

  构造方法一般用于对象的初始化, 无参的构造方法返回值是当前对象的地址。

  23,构造函数和析构函数

  构造函数一般以initWithXXXX开头-初始化。

  析构函数dealloc:对象从内存中销毁前调用的函数。

  构造方法:

  - (id)init {

    if (self = [super init]) {

      //_FUNCTION_当前函数本身

    }

    return self;

  }

  - (void)dealloc {

    NSLog(@"name:%@ release",_name);

    [super dealloc];

  } //在对象完全消失的时候调用,对象销毁时,对象计数器=0。

   //不要人为的调用[xxx dealloc],应该用release销毁[xxx release],release使对象计数器-1,减到0,就会自动调用dealloc函数

  - (void)initialize; //类第一次实例化时调用,只调用一次

  24,self指针(super)(Java中的this、super):指向当前对象的指针,"+"类方法直接用类名调用(静态方法)

  25,类方法不能访问成员变量,类方法不能调用对象的方法。

  26,静态变量(全局、局部)

  未初始化前默认为0,作用域为当前文件,在全局数据区分配。

  静态函数:不能被其他文件所用,其他文件可以定义相同的函数名而不冲突。

  27,点语法  是编译器级别:

  dog.age = 200;  <=>  [dog setAge:200]; 

  int dogAge = dog.age;  -<=>  int dogAge = [dog age]; //具体调用了哪个方法编译器会自动判断

  28,@property int age  <=>  - (void)setAge:(int)newAge;- (int)age;   // .h文件中的声明

     @synthesize  <=>  - (void)setAge:(int)newAge{}  - (int)age{}   //.m文件中的实现

  29,age 与 self.age :在Dog类内部可以直接访问age变量,前者直接访问相当于访问age字段,后者是调用setter和getter函数。

  30,@property 参数(属性):readwrite(getter/setter,缺省),readonly(getter);

  assign(缺省),retain,copy -->表示属性如何存值;

  nonatomic -->表示考虑线程安全问题;

  getter=...;setter=...;,重置getter函数和setter函数。

  31,Category

  *** 实现继承之外的扩展方法的机制,只能扩展函数、消息,不能扩展字段、变量等。

  Category命名规范:要扩展类名+,扩展变量.[hm]

  比如:NSString+ReverseString.h    NSString+ReverseString.m

  -----

posted @ 2015-12-13 20:08  守木  阅读(162)  评论(0编辑  收藏  举报