OC基础——点语法、@property、id、构造方法

来源:互联网 发布:淘宝机器人客服 编辑:程序博客网 时间:2024/05/21 10:11

点语法

    点语法,编译的时候相当于oc当中的set,get方法。在编译的时候,系统会自动的将对应的操作转化为get,set方法
    注意:当点语法在等号的左边出现时,代表set方法
               当点语法出现在其他位置的时候,代表get方法
               Girl *girl = [Girl new];
                       girl.weight = 20;
                       girl.height = 40;
     点语法只适用于get,set方法,其他的方法不行

成员变量的作用域

 1.@public       任意位置
 2.@protected    在本类和子类可以
 3.@private      在本类
 4.@package      在本包内部

用成员变量的位置:1.类的外面 2.本类 3.子类 4.包之间

@property

 @property 是专门用来自动生成成员变量的get,set方法的声明部分(xcode4.4之前)
//告诉Property,get,set方法的成员变量的类型
//告诉property,get,set方法的成员变量是什么,用成员变量去掉下划线后的部分表示

set

1.必须是对象方法
 2.-号开头
 3.以set开头,后面就是成员变量去掉下滑线后的部分,首字母大写
 4.必须没有返回值
 5.必须有参数,参数类型就是成员变量的类型,名字就是成员变量去掉下滑线后的部分

   方法名与声明部分相同
   大括号内部:成员变量 = 局部变量
   -(void)setHeight:(int)height{
        _height = height;
    }

get

 1.必须是对象方法
 2.-号开头
 3.必须有返回值,返回值类型就是成员变量的类型
 4.方法名成员变量去掉下滑线后的部分
@synthesize 作用:专门用来自动生成get,set方法的实现部分
   synthesize就知道生成与.h文件中名称为height的property相对应的get,set方法实现

   方法名与声明部分相同
    大括号当中:return 成员变量
    当synthesize后面只写tel的时候,系统会自动生成一个叫tel的成员变量。
    @synthesize tel;
   xcode4.4以前,property只是自动生成set,get方法的声明,从xcode4.5开始,property可以自动生成成员变量的get,set方法的声明部分,还有实现部分。

oc编译特性

通过加强的property确实是自动生成了名称位_height的成员变量,只是变量是私有的,只能在。m文件中可见
注意:如果要在子类中使用父类的成员变量,那这个成员变量只能手动生成

 set方法的重写

     oc当中所谓的私有方法就是:没有声明,只有实现的方法
     作用:只能有类里面的对象来调用,起辅助作用
     重写的set方法将property生成的set方法实现覆盖了
     当有不恰当的因素的时候(比如:出现脏数据),就要将set方法重写

 id(万能指针)

  id是一种数据类型
 *定义变量
 id myId
 *作为参数,作为返回值
 -(id)test:(id)myId;
 >它是一个万能指针,它可以表示任意对象,前提对象必须是oc的
 >在使用时可以等于NSObject *

    //id实现多态
    id myId = [Person new];
    //当使用id类型的指针调用另一个对象的私有方法的时候,可以直接调方法,不用强制转换
    [myId study];
    //id作为关键字,是不能被声明称变量的。

构造方法

     1.开辟存储空间     +alloc /返回对象的地址
     2.初始化成员变量    -init  /返回对象的地址
     3.返回地址
       返回的是一个没有被初始化的对象
     Person *person1 = [Person alloc];       //得到的是一个已经初始化后的对象
     Person *person2 =  [[Person alloc] init];
 
     在开发中通常情况下alloc与init要联合使用
     Person *person3 = [[Person alloc] init];
    //因为人的年龄,最好是在初始化Person这个对象的时候就给他附上一个正确的值,然后初始化的方法就是init方法,所以现在只需要重写父类的init方法。就可以了
    Person *person1 = [[Person alloc]init];//嵌套调用的方法,从里到外依次执行
  

对比new与(alloc,init)

     1.new是一个死的,调用new方法就会调用alloc和init这两个方法,但是大多数情况下,只需要对init初始化方法进行修改,alloc方法不用去动。
     2.init方法这个位置比较灵活,咱们可以用带参数的初始化构造方法替代init。

0 0