【黑马程序员】-核心语法

-------<a href="http://www.itheima.com"target="blank">android培训</a>、<a href="http://www.itheima.com"target="blank">java培训</a>、期待与您交流! ----------

一、点语法的基本使用

       一个对象的点语法,其实就是set和get方法。只不过写成点语法之后,编译器会自动转换为set或者get方法,并不是代表访问p中的成员变量。这点要与java中的点语法区分开,java中是访问成员变量。

    Person *p = [Person new]; //创建一个对象
    p.age = 10; //利用点语法给成员变量赋值
    //相当于[p setAge: 10];
    
    p.weight = 12.3; //相当于[p setWeight];
    
    int a = p.age; //获取成员变量,相当于get方法
    //相当于a = [p age];
    
    double b = p.weight;
    
    NSLog(@"%d, %f", a, b);
(1)点方法使用注意

@implementation Person
- (void)setAge: (int)age
{
    _age = age;
    
    self.age = age; //这是一个死循环,在set方法中不能出现这样的指令
    //[self setAge: age];
}
@end
       有了点语法,set和get的方法还是不能省略的。因为点语法的实质就是调用set和get方法,如果没有了,那就无法调用。

二、成员变量作用域

@protected:受保护的,该实例变量只能在该类和其子类内访问,其他类内不能访问。默认为此状态。

@private:私有的,该实例变量只能在该类内访问,其他类内不能访问。

@public:共有的,该实例变量谁都可以访问。

(1)在实现方法中定义的成员变量是私有的;

(2)没有类的声明,也可以直接在main函数中直接定义方法类,且可用@public改为公有(默认为私有);

(3)子类继承父类后,子类拥有父类的所有方法和属性。但是,关键是子类是否可以直接访问。一般情况下是不可以直接访问父类的属性的,而要通过方法来访问(默认)。

三、@property和@synthesize

       这两条指令可以帮助我们自动生成set和get方法。

1、@property  int  age;自动生成某个成员变量的get和set方法声明。

     等同于:- (void)setAge: (int) age;    - (int) age;

2、@synthesize age  = _age;//对age进行实现。

       @implementation Person

       @synthesize  age = _age;

       @end

3、如果类型相同可以一起写

     @property  int   speed, wheels; //会自动访问_speed 和_wheels,如果不存在,会自动生成,且为@private类型。

4、利用@property完全可以实现set和get的声明以及方法实现。

@property int no;
//这句话的作用:(1)已经自动生成了成员变量_no;
//           (2)已经声明了no得方法;
//           (3)已经完成了实现。
5、已经存在某个成员变量,或者实现方法时,@property就不会再生成相应的变量或者方法了。

@interface Person : NSObject
@property int no;  //实现中不会自动生成get方法
@end
@implementation Person
- (int)no  //此处已经手动写入了get方法,因此不会再自动生成
{
    return _no;
}
@end
四、类型关键字id

id声明的对象的特性:

(1)没有 * 号;

(2)动态数据类型;

(3)可以指向任何类的对象(设置是nil),而不关心其具体类型;

(4)在运行时检查其具体类型;

(5)可以对其发送任何(存在的)消息;

五、构造方法

      构造方法就是对对象进行初始化的方法。

1、[Person new];   //new是一个类方法。

     要想完整的创建一个可用对象:首先要分配内存空间,利用alloc;其次要初始化,利用init。

     alloc:类方法,创建一个xx类型的已分配好内存的对象;

     init:对象方法,对已创建的对象进行初始化;

2、init构造方法

     构造方法都是在@implementation中实现。基本使用格式为:

//init构造方法
- (id)init
{
    //1、首先一定要调用super的init方法:初始化父类中的成员变量和其它属性。
    self = [super init]; //为了回到当前的对象
    if (self != nil)
    {  //初始化成功
        _age = 10;
    }

//    if (self = [super init])  //可以这样写,以后就用这种方法
//    {  //初始化成功
//        _age = 10;
//    }
    return self;
}
如果父类和子类都含有init方法,那么优先调用子类的,再从子类的init中进入父类的init。但构造方法是优先调用NSObject中的。

重写构造方法的目的:为了使对象在创造出来时,成员变量就会有一些固定的值。

重写自定义构造方法的规范:(1)一定是对象方法,以“-”开头;(2)返回值一般为id类型;(3)方法名一般以init开头。

带有变量传入的程序:

- (id)initWithAge:(int)age
{
    //1、首先一定要调用super的init方法:初始化父类中的成员变量和其它属性。
    self = [super init]; //为了回到当前的对象
    if (self != nil)
    {  //初始化成功
        _age = age;
    }
    return self;
}

-------<a href="http://www.itheima.com"target="blank">android培训</a>、<a href="http://www.itheima.com"target="blank">java培训</a>、期待与您交流! ----------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值