美文网首页
OClesson02

OClesson02

作者: fanaf | 来源:发表于2015-11-05 21:24 被阅读9次

    lesson2

    创建一个person类
    Person *p = [[Person alloc]init]; p->name = @"lisi"; 这句代码有误!!!!!
    因为_name是protected可见度,所以在这里不能直接访问
    p->gender = @"nan";这句代码有误!!!!
    因为_gender是private可见度,所以在这里不能直接访问
    p->_age = 23 ;
    // 因为_age是public可见度,所以在这里可以访问到。
    // oc中的方法调用叫做消息发送,向某个对象发送某个消息.
    [p setName:@"菜鸡"]; [p setAge:25]; [p setGender:@"女"]; NSLog(@"%@ %@ %d",[p name],[p gender],[p age]);
    // 调用p的name实例变量的赋值方法 ,修改姓名
    // 调用自定义初始化方法,在初始化过程的同时给实例变量赋值,如果只是重写父类的初始化方式,则只能给实例变量设置默认值,不能在创建对象过程中赋值。
    Car *car1 = [[Car alloc]initWithPrice:200000 No:@"asxz57585" Brand:@"!天堂"];


    @interface Car : NSObject
    {
        int _price;
        NSString *_brand;
        NSString *_No;
    }
    

    // 自定义初始化方法
    // 自定义的初始化方法,必须用init开头

    - (instancetype)initWithPrice: (int)price
                        No: (NSString *)No
                     Brand: (NSString *)brand;
    

    @implementation Car
    - (instancetype)initWithPrice: (int)price
                        No: (NSString *)No
                     Brand: (NSString *)brand{
        _price = price;
        _No = No;
        _brand = brand;
        
        return self;
    }
    @end
    

    @interface Person : NSObject {
    // 实例变量默认的可见度是protected 只能在本类和继承本类的子类中直接被访问到
    NSString *_name;
    @private
    // 私有的可见度,只能在本类中直接访问,在继承本类或者其他地方无法访问该实例变量
    NSString *_gender;
    @public
    // 共有的可见度,可以在任何地方访问到这种可见度的实例变量;
    int _age;
    }

    // oc 中的方法分别为类方法和实例方法,分别用+ 和 - 作为方法的标示符
    // 类方法只有类名调用,实例方法只能由对象来调用,由于我们在开发中很少直接使用类方法,所以经常定义的是实例方法,但是这并不代表我们不能定义类方法
    // - 表示方法的类型
    // (void)表示方法返回的类型
    // replaceAtIndex/ withobject : 方法参数的说明 一般是形容参数的作用以及这个方法实现的功能
    // NSInteger /id 表示参数的类型
    // 冒号: 表示后面紧跟着的是参数类型及参数名 ,一个方法名中有几个冒号 ,就有几个参数

    // 如何确定方法名 :去掉方法的类型符号,返回值类型,参数类型,参数名,剩下的参数形容词和冒号就是方法名,切记:冒号不能省,因为冒号标志着方法的个数。

    // 方法名不能重复,如果方法类型不同,则两个方法名可以相同

    - (void)setWithName: (NSString *)name
                 gender: (NSString *)gender
                    age: (int)age;
    - (void)setName: (NSString *)name;
    - (void)setGender: (NSString *)gender;
    - (void)setAge: (int )age;
    - (NSString *)gender;
    - (NSString *)name;
    - (int)age;
    

    /*
    1、因为默认的实例变量的可见度是被保护的,只能在本类和继承自本类的子类中访问到,所以我们需要一个方法,提供在外部访问,修改实例变量的功能,这样的一对方法就是setter 和 getter方法
    2、setter方法的书写规则 —(void)set+首字母大写的实例变量:(参数类型)+首字母小写实例变量名
    3、getter方法的书写规则 (参数类型)get+首字母大写的实例变量或者是(参数类型)+小写实例变量名
    4、setter方法的本质使用一个带参数的方法在类的内部修改实例变量的值为参数的值
    5、getter方法的本质就是使用return语句将实例变量的值得首地址返回到类的外部
    6、 通常情况下,我们将getter方法前面的get省略掉。
    */


    @implementation Person
    - (instancetype)init{
        _name = @"qq"; 
    

    // _name 的可见度是默认的可见度(protected),在类的内部可以直接访问

    return self;
    }
    
    - (void)replaceAtIndex: (NSString *)index withObject: (id)object{
    
    
    }
    - (void)setWithName: (NSString *)name
                 gender: (NSString *)gender
                    age: (int)age{
        _name = name;
        _gender = gender;
        _age = age;
    }
    

    // 实现name,gender,age的赋值方法

    - (void)setName: (NSString *)name{
        _name = name;
    }
    - (NSString *)name{
        return _name;
    }
    
    - (void)setGender: (NSString *)gender{
        _gender = gender;
    }
    - (NSString *)gender{
        return _gender;
    }
    - (void)setAge:(int)age{
        _age = age;
    }
    - (int)age{
        return _age;
    }
    

    相关文章

      网友评论

          本文标题:OClesson02

          本文链接:https://www.haomeiwen.com/subject/eikchttx.html