首页 > 技术文章 > OC的基础语法(五)

iosnds 2015-10-19 13:41 原文

1.点语法

/*
 
  点语法:
 
      通过 实例对象名.成员变量 的方式获取或者设置成员变量值得形式,就是点语法
 
 
      1)点语法获取成员变量值的格式: 点语法格式,出现在了等号的右侧
 
          NSString *str = p.name;   //获取变量名
  
      2)点语法设置成员变量值的格式: 点语法格式,出现在了等号的左侧
 
         p.name = @"过儿";
 
      3)点语法的实质:
 
        点语法是一个编译器特性,是方法的调用
 
         遇到这句话:p.name = @"过儿";
 
            转换为: [p setName:@"过儿"];  //实质还是调用set方法
 
 
         遇到这句话:NSString *name = p.name;
            转换为: NSString *name = [p name];  //实质是调用了get方法
 
 
      4)使用注意:
 
         1)如果没有定义成员变量的get和set方法,则不能够使用点语法。
         2)OC的点语法,本质是方法的调用,不是直接访问成员变量。
 
 */

2.@property的使用

/*
 
    @property 编译器的指令
 
        告诉编译器帮我们声明成员变量的getter和setter方法
 
    @property 的使用格式:
 
        @property 数据类型  成员变量名;
 
 */
@property float money;
/*
   -(void)setMoney:(float)money;
   -(float)money;
 
 */

@end

3.@synthesize

/*
 
 @synthesize 
 
      帮我们实现 用 @property声明的属性的set和get方法
 
      使用格式: @synthesize 成员变量名
 
      {
            int age;
      }
      @property int age;
 
      @synthesize age;   //展开后操作的是 age成员变量
 
@synthesize使用注意:
 
      1)@synthesize  name;  //name必须存在
      2)当有多个变量需要实现它的get和set方法的时候,
  
         @synthesize age,pid;  //age和pid必须类型一致
         @property int age,pid; //age和pid必须类型一致
         
      3)@synthesize = _age;    //表示指定get和set方法操作的变量
 
 */

4.结合使用

/*
 
   @property在xcode4.4之前
 
       @property只是用来作为 get和set方法的声明
 
       @synthesize用来作为 get和set方法的实现
 
       所以,在4.4之前他们是成对出现的
 
 
  @property增强
 
       我们只需要在 @interface 和 @end之间,使用一次@property int age;
 
       编译器会自动的帮我们把age的实现也给做了。
 
 
 */

5.新手容易混肴的注意点

如图 如果先定义age 后如果再定义_age 会出现警告  

这是因为@property age之后 xcode会自动实例一个变量_age ,这时如果再@property _age  xcode是不会实例_age的

即不会实例__age(两个下划线)

解决问题也很简单 只需要添加

@synthesize  一一对应即可

6.id类型
/*
 
    动态类型和静态类型
 
    1、动态类型:程序在运行的时候,才知道对象属于哪个类类型
 
          Animal *ani = [Dog new];
 
          动态类型是在运行时进行检查的
 
    2、静态类型:程序在编译的时候,就知道对象属于哪个类型
 
          Dog *dog = [Dog new];
 
          静态类型是在编译的时候检查的
 
    3、NSObject 访问子类特有的方法
 
          所有的类都是继承自NSObject
 
          NSObject *obj = [Dog new];
 
                    obj ---> Dog  (多态)
 
    4、id类型
 
       id类型实际上就是NSObject
 
 */int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        Animal *ani = [Dog new];
        //狗的方法
        //[ani run];
        
        //NSObject 是一个基类,是所有类的父类,
        //NSObject 可以指向任何类
//        NSObject *obj = [Dog new];  //运行是检查
//        [(Dog*)obj run];
//        
//        obj = [Cat new];    //运行是检查
//        [(Cat *)obj run];
        

  //以上需要强制转换类型
//定义一个id类型的指针 //id类型也称为 万能指针 类型 自动检测类型 //obj1指向了Dog的对象 id obj1 = [Dog new]; [obj1 run]; //obj1 指向了Cat对象 obj1 = [Animal new]; [obj1 run];

// Animal *an3 = [Animal new]; // [(Dog*)an3 bark]; //[(Dog*)obj1 bark]; } return 0; }

 

推荐阅读