首页 > 代码库 > 《OC疯狂讲义》笔记(五)

《OC疯狂讲义》笔记(五)

1、OC中的点语法
 
    点语法: 对象名.成员变量名   (点语法不是访问成员变量,而是方法的调用)
            它是一个编译器特性
 
    点语法作用:可以替换传统的get和set方法的调用
 
    点语法的前提:
 
             首先得先有 get和set方法
 
    点语法实质:
 
             调用get和set方法
 
             如果点语法出现在 = 的左边,表示设置值,相当于调用了set方法
 
                   p.age = 10;
 
                   替换为:[p setAge:10];
 
             如果点语法出现在 = 的右边,表示获取值,相当于调用了get方法
 
                   int age = p.age;
 
                   替换为:int age = [p age];
 
                   替换为:[p dispAge:p.age];
  
                          [p dispAge:[p age]];
 
       注意:
 
          点语法实质是调用get和set方法,所以,如果没有定义成员变量的get和set方法,这个时候,是不能使用点语法的。
 
 
 2、@property使用、增强
 
    1)@property 在Xcode4.4之前的使用方法
 
      (1)只是用@property作为方法的声明‘
 
       格式:@property int age;  表示帮我们生成一个get和set age的方法
       {
            int age;
            int _age;
            NSString *_name;
       }
 
       @property int age;
       -(void)setAge:(int) age;
       -(int)age;
 
         //手工实现 get和set方法
         -(void)setAge:(int) age{
              self->age = age;
         }
         -(int)age{
              return age;
         }
 
 
       @property int _age;
       -(void)set_age:(int) _age;
       -(int)_age;
 
 
       @property NSString *name;
       -(void)setName:(NSString*) name;
       -(NSString*)name;
 
  
      (2)@synthesize 关键字
 
          @synthesize 变量名;
     
          自动帮我们实现对应的get和set方法
 
          @synthesize age,_age;
        
             @synthesize 相当于帮我们实现了下面的方法
             -(void)setAge:(int) age{
                 self->age = age;
             }
             -(int)age{
                 return age;
             }
 
          @synthesize name;
  
       (3)@synthesize name = _b;
 
          {
               NSString *name;
               NSString *_b;
          }
 
          @property NSString *name;
          @synthesize name;     // get和set方法设定的是 name的值
 
          @synthesize name = _b; //相当于操作_b的值
 
           -(void)setName:(NSString *) name{
                   _b = name;
           }
 
           -(NSString *)name{
                 return _b;
           }
 
 
         注意:在4.4之前,@property和@synthesize成对出现
 
    2)@property 在Xcode4.4之后(@property增强)
 
       增强使用:
       @property int score;
 
       1).h文件中 帮我们声明 setScore(setter) 和 score(getter)方法
 
       2).m 中帮我们生成 _score的私有变量(在外部不能访问,不能被子类继承)
 
       3).m 中帮我们实现 get和set方法
 
 
 3、@synthesize的使用
 
 4、动态类型&id类型
 
    动态类型:程序在运行的时候,才能确定对象属于什么类型
    静态类型:程序编译的时候,就确定了对象的类型
 
    动态类型的体现: 多态,父类指针可以指向子类对象
 
    NSObject 是所有类的基类
 
    NSObject *obj = [Dog new];
    obj = [Person new];
 
    父类调用子类特有的方法
     
     [(Person *)obj eat];
 
    //id类型,id类型又被称为 万能指针。
 
    id obj;  //运行时检查
    obj = [Car new];
    [(Car*)obj stop];
 
 
 5、动态类型检测的方法
 
    7个方法
 
    1)对象所属关系判断
 
      对象是否是指定类或者子类的实例对象
 
      isKindofClass
 
      对象是否是指定类的实例对象
     
      isMemberOfClass
 
      类是否是另外一个类的子类
   
      isSubclassOfClass
 
    2)判断能否响应方法
 
      对象是否能够响应方法
     
      类是否能够响应方法
 
      类去响应方法
  
      
    3)响应方法
 
       传参数
 
 
 6、构造方法的使用
 
        [Person new];
 
     ->   [Person alloc]; //空间申请完后,不能立即使用,有可能会导致意想不到的错误
 
     ->   [[Person alloc] init];
 
        [Person new];  会把我们的成员变量的值,默认的设置为0
 
        init 是我们OC类的一个构造方法
        构造方法是类创建的时候,默认调用的
 
        init 是继承自 NSObject 的
   
        在子类中通过重写父类的init方法,指定成员变量初始化值
  
        init方法的固定格式:
 
        -(id)init{
 
            //初始化父类的
            //判断是否初始化成功
             if(self = [super init]){


                 //初始化自己的信息
                    _age = 10;
            }
            //返回
            return self;
        }
 
 7、自定义构造方法


       如果要指定成员变量值的初始化,需要自定义构造方法
 
       1)一定是对象方法
 
       2)返回值 一般是 id类型
 
       3)一定是以initWith开头
 
  
       -(id)initWithName:(NSString *) name{
 
         //判断是否初始化成功
         if(self = [super init]){
         
             //初始化自己的信息
             _name = name;
         }
         //返回
         return self;
 
 
       }

《OC疯狂讲义》笔记(五)