iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

来源:互联网 发布:上古卷轴5捏脸数据整合 编辑:程序博客网 时间:2024/06/06 03:25

本分享是面向有意向从事iOS开发的伙伴们,或者已经从事了iOS的开发者。如果您对iOS开发有极高的兴趣,可以与我一起探讨iOS开发,一起学习,共同进步。如果您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列,然后在开始Objective C语言的学习,如果您遇到问题也可以与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料,都是干货哦!可以新浪微博私信➕关注极客James,期待与您的共同学习和探讨!!由于时间有限,每天在工作之余整理的学习分享,难免有不足之处,也希望各路大神指正!

made by :极客James
这里写图片描述

一、OC中面向对象特性 封装
1.封装
封装性就是隐藏实现细节,,仅对外公开接口。
2.为什么要进行封装?
类是数据与功能的封装,数据就是成员变量,功能就类方法或对象方法
对数据的封装,也就是对成员变量的封装
不封装的缺点:当一个类把自己的成员变量暴露给外部的时候,那么该类就失去对该成员变量的管理权,别人可以任意的修改你成员变量。
封装就是将数据隐藏起来,只能用此类的方法才可以读取或者设置数据,不可被外部任意修改是面向对象设计本质。降低了数据被误用的可能性! 提高代码的灵活性。

封装的原则:
将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共的方法对其访问。

二、OC中面向对象特性 继承
1.继承
同一基类中的共同特性,子类也有其特性,简言之子类继承父类的,就叫做继承。
2.继承关系
B类继承A类,那么B类将拥有A类的所有属性和方法,此时我们说A类是B类的父类,B类是A类的子类。

C类继承B类,那么C类将拥有B类中的所有属性和方法,包括B类从A类中继承过来的属性和方法,此时我们说B类是C类的父类,C类是B类的子类。

3.OC中实现继承的格式

@interface 子类名称 : 父类名称

@end

三、OC中面向对象特性 多态
1.多态
同一事物的多种表现形式。在程序中为:父类指针指向子类对象。

2.多态的条件
(1)有继承关系
(2)子类重写父类方法
(3)父类指针指向子类对象
表现:当父类指针指向不同的对象的时候,通过父类指针调用被重写的方法的时候,会执行该指针所指向的那个对象的方法。

3.多态的优点
多态的主要好处就是简化了编程接口。它允许在类和类之间重用一些习惯性的命名,而不用为每一个新加的函数命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类的区分开来。

多态也使得代码可以分散在不同的对象中而不用试图在一个函数中考虑到所有可能的对象。 这样使得您的代码扩展性和复用性更好一些。当一个新的情景出现时,您无须对现有的代码进行 改动,而只需要增加一个新的类和新的同名方法。

4.多态的注意点
1)如果存在多态,父类是可以访问子类特有的方法。
2)如果父类指针指向子类对象, 如果需要调用子类特有的方法, 必须先强制类型转换为子类才能调用。

四、setter方法
1.作用
用来设置成员变量,可以在方法里面过滤掉一些不合理的值

2.命名规范
(1)必须是对象方法。
(2)返回值类型为void。
(3)方法名必须以set开头,而且后面跟上成员变量名去掉”_” 首字母必须大写。
(4)必须提供一个参数,参数类型必须与所对应的成员变量的类型一致
形参名称和成员变量去掉下划线相同。

实例:

- (void)setAge:(int)age;

3、setter方法的优点
不让数据暴露在外,保证了数据的安全性
对设置的数据进行过滤

五、getter方法
1.作用
为调用者返回对象内部的成员变量的值。

2.命名规范
(1)必须是对象方法
(2)必须有返回值,返回值的类型和成员变量的类型一致
(3)方法名必须是成员变量去掉下划线
(4)一定是没有参数的

实例:
如果成员变量为int _age 那么与之对应geter方法为

- (int) age;

getter的实现方法:

  - (int)age{  return _age;}

3.getter方法的优点
(1)可以让我们在使用getter方法获取数据之前,对数据进行加工;
(2)比如双十一活动,我们希望对全线商品的价格在原来的价格基础上打五折,那么我们只要去改成品类的价格的getter方法就可以了,让他返回的值为价格 * 0.5。

六、setter和getter方法的注意
(1)在实际的开发中,不一定set和get方法都会提供,如果内部的成员变量,比如学生的学号或计算出来的数据。这样的数据只允许外界读取,但是不允许修改的情况,则通常只提供get方法而不提供set方法 。

(2)成员变量名的命名以下划线开头,get方法名不需要带下划线

(3)成员变量名使用下划线开头有两个好处
(4)与get方法的方法名区分开来
(5)可以和一些其他的局部变量区分开来,下划线开头的变量,通常都是类的成员变量。当我看到以下划线开头变量,那么他一定是成员变量
(6)一个属性可以只有getter方法, 没有setter方法, 这种属性我们称之为只读属性
(7)一个属性也可以只有setter方法, 没有getter方法, 这种属性我们称之为只写属性
(8)如果既有setter方法又有getter方法, 那么这种属性我们称之为可读可写的属性,并且, 一个属性也可以没有getter和setter, 这种属性我们称之为私有属性。

七、点语法
1.点语法本质
点语法的本质是是方法调用,是编译器特性,当有点语法时,编译器就会生成相应的方法,在iOS开发中非常重要也非常常用。

2.点语法特质
当点语法使用在 “=“赋值符号左侧的时候,点语法会被展开为setter方法的调用,其他情况(等号右侧、直接使用)为点语法展开为getter方法的调用。

3.点语法注意
(1)点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相 应的方法调用。

(2)切记点语法的本质是转换成相应的对setter和getter方法调用,如果没有set和get方法,则不能使用点语法。

(3)不要在getter 与 setter方法中使用本属性的点语法。

(4)点语法一般用于给成员变量赋值, 如果不是给成员变量赋值一般情况下不建议使用, 但是也可以使用。

- (void) setAge:(int)age {    // 下面的代码会引发死循环    self.age = age;        //编译器展开后 [self setAge:age]}
- (int) age {    // 下面的代码会引发死循环    return self.age;          // 编译器展开后 [self   age]}

八、self关键字、super关键字
1.self关键字
(1)首先要理解什么是self,什么是成员变量,什么是对象方法,什么是类方法这几者的概念。
(2)成员变量:成员变量是一个实例对象的具体状态特征,并且这些状态特征是可以改变的,如张三的年龄,身高,体重等
(3)对象方法:一个实例对象的行为,比如张三具有吃的行为,张三做出这样行为的时候,有可能会影响,自身的某些状态特征,比如张三吃可能会增加张三体重和身高。
(4)类方法:类方法是某个类的行为,可以直接通过类名调用;如果在类方法中需要使用某些数据,必须通过参数传入;它不能访问成员变量。

2.类方法中的self
(1)在整个程序运行过程中,一个类有且仅有一个类对象。
(2)通过类名调用方法就是给这个类对象发送消息。
(3)类方法的self就是这个类对象
(4)在类方法中可以通过self来调用其他的类方法
(5)不能在类方法中去调用对象方法或成员变量,因为对象方法与成员变量都是属于具体的实例对象的。
(6)类方法中可以直接调用类方法
(7)类方法中不可以直接调用对象方法
(8)类方法中不能访问成员变量

3.对象方法中的self
(1)在整个程序运行过程中,对象可以有0个或多个
(2)通过对象调用方法就是给这个对象发送消息
(3)对象方法中self就是调用这个方法的当前对象。
(4)在对象方法中,可以通过self来调用本对象上的其他方法
(5)在对象方法中,可以通过self来访问成员变量

4.self总结
(1)谁调用self所在的方法,那么self就是谁
(2)self在类方法中,就是这个类的类对象,全局只有一个,可通过self调用本类中的其他类方法,但是不能通过self来调用对象方法或访问成员变量
(3)self在对象方法中,就是调用这个方法的那个对象, 可以通过self调用本类中其他的对象方法,访问成员变量,但不能通过self调用本类的类方法。
(4)通过self调用方法的格式:[self 方法名];
(5)通过self访问成员变量格式:self->成员变量名
(6)我们只用关注self在哪一个方法中 , 如果在类方法那么就代表当前类, 如果在对象方法那么就代表”当前调用该方法的对象”.

5.self使用注意
(1)同时有对象方法和类方法存在的时候,self不会调错
(2)self只能在方法中使用;不要使用self来调用函数,也不可以在函数内部使用self;
(3)使用self调用本方法,导致死循环调用。

九、实例变量修饰符
1.实例变量的作用域
1)@public (公开的)在有对象的前提下任何地方都可以直接访问。
2)@protected (受保护的)只能在当前类和子类的对象方法中访问
3)@private (私有的)只能在当前类的对象方法中才能直接访问
4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中相当于@public,在框架外部相当于@private

2.变量修饰符在子类中的访问
1)@private私有成员是能被继承,也不能被外部方法访问。
2)@public 公有成员能被继承,也能被外部方法访问。
3)@protected 保护成员能够被继承,不能够被外部方法访问。

3.实例变量作用域使用注意事项
(1)在@interface @end之间声明的成员变量如果不做特别的说明,那么其默认是protected 的。
(2)一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都拥有,只是有的它不能直接访问。例如@private的

这里写图片描述

2 0
原创粉丝点击