黑马程序员 OC--------一些关键字学习

本文详细介绍了Objective-C中的self和super关键字的使用方法及其注意事项。解释了如何通过self在类方法及对象方法中调用不同的方法,并讨论了super在继承中的作用,包括如何在子类中调用父类的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---------------------- 


self关键字

类方法中调用类方法 // OK      类方法中可以通过self来调用类方法

     类方法中调用对象方法 // OK  类方法不可以通过self调用对象方法

     对象方法中调用对象方法 // ?   对象方法通过self调用对象方法

     对象方法中调用类方法 // OK    对象方法中不可以通过self调用类方法

 总结:

     1.>谁调用当前方法self就代表谁

     *self出现在类方法中self代表当前类

     *self出现在对象方法中slef代表对象

     self一定是在类的方法中使用(类方法/对象方法)

     

     在对象方法中访问成员变量的集中方式:

     1>直接通过成员变量名称访问

     2>通过self调用set方法访问

     3>通过self->成员变量名称的方法访问

     

     self注意:

     > 不能在对象方法中调用同名的对象方法(死循环)

     > 不能在类方法中调用同名的类方法(死循环)


super关键字

总结:

     super作用:

     1.在子类中调用父类的某个方法

     2.super在对象方法中就会调用父类的对象方法

       super在类方法中就会调用父类的类方法

     

     super的使用场合:

     子类重写父类的方法的时候,想保留父类的方法时就可以使用super

     

     

     self注意:

     > 不能在对象方法中调用同名的对象方法(死循环)

     > 不能在类方法中调用同名的类方法(死循环)

有的情况下用self也可以调用父类的方法,但是在真实开发中建议使用super


点语法

给成员变量赋值的三种方法

1.直接访问成员变量赋值

2.通过get set方法赋值

3.通过点语法赋值

    p1.age不是直接访问成员变量

  点语法的本质还是访问get set方法

例如:P1.age=55;

当.语法在等号左边的时候会自动转换成  [p1 setAge:55];

例如: int a = p1.age;

 当.语法不在等号左边的时候会自动转换成 [p1 age];

4.死循环注意
-(void)setAge:(int)age{
       //下面代码会引发死循环
      self.age = age;
}
-(int)age{
       //下面代码会引发死循环
       return self.age;
}

成员变量的作用域

专门用来控制成员变量的作用域的关键字

 @public 

 public修饰的成员变量可以在其它类中访问,

 也可以在本类中访问

 在子类中可以访问被public修饰的成员变量

 @public的作用范围,是从编写的那一行开始一直到遇到下一个修饰符为止

 @private

 private修饰的成员变量不能在其它类中访问,

 可以在本类中访问被private修饰的成员变量,

 在子类中不能访问被private修饰的成员变量

 

 @protected

 protected修饰的成员变量不能在其它类中访问

 可以在本类中访问被protected修饰的成员变量,

在子类中可以访问被protected修饰的成员变量

 

 默认情况下所有的成员变量都是受保护的

 

property关键字和synthesize关键字

@property关键字:

 在xcode4.4以前,property关键字是专门用来生成get/set方法的声明的

1. 告诉property要生成哪个成员变量的get/set方法

 2. 告诉property生成的get/set方法的变量的类型

例如:

- (void)setAge:(int)age;

 - (int)age;

也可以写成

@property int age;

@synthesize关键字是专门用来生成get/set方法的实现

例如:

@synthesize age;

如果没有指定赋值给谁,会赋值给@synthesize后面同名的成员变量

如果要生成多个属性的get/set方法的实现可以一行搞定

例如:

@synthesize age = _age, number = _number, name = _name;

但不建议这么写    因为可读性太低


在xocode4.4以后,@property不仅仅会生成get/set方法的声明,

 还会生成get/set方法的实现

 如果没有编写成员变量,property会自动生成一个_开头的成员变量,会在.m文件中生成

 注意点:如果想在子类中使用该成员变量,必须自己手动编写成员变量

通过property自动生成的get/set方法和synthesize不同,

     property自动生成的是赋值给_开头的成员变量

property只会给我们生成最简单的get set方法,而不会进行数据过滤

如果要进行数据过滤,就必须直接重写get/set方法

但是注意:如果同时重写了 get/set方法,property就不会帮我们生成_开头的成员变量


---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---------------------- 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值