A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© huh 中级黑马   /  2015-12-8 22:48  /  1410 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

是什么?

    点语法还是方法的调用.点语法是Xcode编译器的一个功能!

有什么用?

    提供一种更方便的方式去调用属性!

怎么用?

    对象名.属性名(get方法)

    对象名.属性名 = 数据;(set方法)

用的时候注意什么?

    1,使用点语法的前提,成员变量的get方法,去掉get,直接属性名,但是set方法保持不变!

    2,点语法的本质还是方法的调用!

    3,点语法不能在set方法里面调用set方法,get方法里面调用get方法!(否则出现死循环)

        set方法里面可以调用get方法,前提是get方法里面没有调用set方法!

        get方法里面可以调用set方法,前提是set方法里面没有调用get方法!

    4,点语法可以调用普通方法,只要符合规则!(一般不这么用)

        规则就是,有声明 -(void)add; 有实现-(void)add{}

Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject{
    NSString *_name;
    int _age;
    double _high;
}
-(void) setName:(NSString *)name;
//原有get方法:getName,点语法的get方法:name.
-(NSString *)name;
-(void) setAge:(int)age;
-(int)age;
-(void) setHigh:(double)high;
-(double)high;
-(void)setWeight:(double)weight;
-(double)weight;
-(void)add;
@end
Person.m
#import "Person.h"
@implementation Person
#pragma mark name的set和get方法
-(void) setName:(NSString *)name{
   
    _name = name;
    //可以在set方法里面调用自己的get方法!(前提是get方法里面没有调用set方法,否则死循环)
    //不可以在set方法里面调用,自己的set方法,会死循环!
    //NSLog(@"名称:%@",self.name);
}
-(NSString *)name{
    //可以在get方法里面调用自己的set方法!(前提是set方法里面没有get方法,否则死循环)
    //不能在get方法里面调用,自己的get方法!否则进入死循环
    self.name =@"haha"; //[self setName:@"haha"];
    //self.name;
    return _name;
}
#pragma mark - age的set和get方法
-(void) setAge:(int)age{
    _age = age;
}
-(int)age{
    return _age;
}
#pragma mark - high的set和get方法
-(void) setHigh:(double)high{
    _high = high;
}
-(double)high{
    return _high;
}
//点语法的get方法不用get成员变量名.而是直接用成员变量名.
#pragma mark - weight
-(void)setWeight:(double)weight{
    NSLog(@"weight");
}
-(double)weight{
    return 11.0;
}
#pragma mark - add
-(void)add{
    NSLog(@"add...");
}
main.n
/*
29点语法的使用

1.直接用对象的指针名.(去掉get或set的)方法名.
2.前题:成员变量的get方法,不再需要get,但set方法保持不变.

本质:
点语法本质还是方法调用.去调用的类中定义的set get方法(get方法不需要前面加get);
点语法Xcode编译器的一个功能.本质上还是去调用方法.
提供一种更方便的方式去操作属性.

两个要注意的问题:
1.不能在set或get方法里用点语法调用自已.否则会出现死循环.
    说明:1)在set方法里面调用set方法不可以(self.name =@"huh"),会出现死循环!
        2)在set方法里面可以调用get方法,前提是get方法里面,没有调用set方法,否则死循环!
2.点语法可以调用普通方法,只要符合规则.但是不要这么做.
    规则是什么?
        有声明 -(void)add;
        有实现 -(void)add{}
*/
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    Person *per = [Person new];
    [per setName:@"huh2"];
    [per setAge:32];
    [per setHigh:1.72];
    NSLog(@"姓名:%@,年龄:%d,身高:%.3f",[per name],[per age],[per high]);
   
    //点语法
    per.name = @"huh";
    per.age = 23;
    per.high = 1.70;
    NSLog(@"姓名:%@,年龄:%d,身高:%.3f",per.name,per.age,per.high);
    per.add;
    return 0;
}

2 个回复

倒序浏览
好认真哦
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马