本分享是面向有意向从事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的

iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法的更多相关文章

  1. iOS开发核心语言Objective C —— 全部知识点总结

    本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基 ...

  2. iOS开发核心语言Objective C —— 所有知识点总结

    C和OC对比 OC中主要开发在什么平台上的应用程序?答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头?答:OC中新增关键字大部分是以@开头 OC中新增 ...

  3. Android &Swift iOS开发:语言与框架对比

    转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...

  4. 李洪强漫谈iOS开发[C语言-043]-判断较早日期

    李洪强漫谈iOS开发[C语言-043]-判断较早日期

  5. 李洪强漫谈iOS开发[C语言-043]-练习

    李洪强漫谈iOS开发[C语言-043]-行李重量计算价格

  6. 李洪强漫谈iOS开发[C语言-042]-简单计算器

    李洪强漫谈iOS开发[C语言-042]-简单计算器

  7. 李洪强漫谈iOS开发[C语言-041]-计算月份天数

    李洪强漫谈iOS开发[C语言-041]-计算月份天数 

  8. 李洪强漫谈iOS开发[C语言-040]-switch case

    李洪强漫谈iOS开发[C语言-039]-switch case 补充:

  9. 李洪强漫谈iOS开发[C语言-039]-剪刀石头布

     李洪强漫谈iOS开发[C语言-039]-剪刀石头布

随机推荐

  1. FX3 DMA生产者消费者ID代表的含义

    在开发FX3的时候,觉得赛普拉斯的库注释太少,很多时候无法理解代码含义.由于使用DMA,需要理解DMA生产者消费者代表的含义,经过多方查找,决定记录下来. 在cyu3dma.h中对SocketID进行 ...

  2. 【RAID】raid1 raid2 raid5 raid6 raid10的优缺点和做各自raid需要几块硬盘

    Raid 0:一块硬盘或者以上就可做raid0优势:数据读取写入最快,最大优势提高硬盘容量,比如3快80G的硬盘做raid0 可用总容量为240G.速度是一样.缺点:无冗余能力,一块硬盘损坏,数据全无 ...

  3. luogu2051 [AHOI2009]中国象棋

    巨水,调了好久,心态爆炸 #include <iostream> #include <cstring> #include <cstdio> using namesp ...

  4. Leetcode 392.判断子序列

    判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 ...

  5. [android开发篇]权限列表

    http://www.open-open.com/lib/view/open1425868811607.html

  6. HDU-5319 Painter,深搜标记!

    Painter 题意:有一个棋盘n行,列数不超过50,用red和blue给这个棋盘涂色,每个格子每种颜色最多涂一次,如果两种颜色都涂了则该格子颜色为Green;red以斜杠'\'方式涂色,bule以' ...

  7. 九度oj 题目1016:火星A+B

    题目描述:     读入两个不超过25位的火星正整数A和B,计算A+B.需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数.例如:地球上的10进制数2,在火星上记为“1,0”,因为 ...

  8. PIL:Python Imaging Library(图像处理标准库)和Qrcode:二维码生成

    安装PIL Mac或Linux安装命令:sudo easy_install PIL 如果报错:fatal error: 'freetype/fterrors.h' file not found Mac ...

  9. 【Luogu】P2158仪仗队(欧拉函数)

    题目链接 首先来介绍欧拉函数. 设欧拉函数为f(n),则f(n)=1~n中与n互质的数的个数. 欧拉函数有三条引论: 1.若n为素数,则f(n)=n-1; 2.若n为pa,则f(n)=(p-1)*(p ...

  10. Hibernate批量更新和批量删除批量添加(转)

    通常,在一个Session对象的缓存中只存放数量有限的持久化对象,等到Session对象处理事务完毕,还要关闭Session对象,从而及时释放Session的缓存占用的内存.批量处理数据是指在一个事务 ...