C语言学习之Objective—特有语法及设计模式
小标 2018-07-25 来源 : 阅读 1190 评论 0

摘要:本文主要向大家介绍了C语言学习的Objective—特有语法及设计模式,通过具体的内容向大家展示,希望对大家学习C语言有所帮助。

本文主要向大家介绍了C语言学习的Objective—特有语法及设计模式,通过具体的内容向大家展示,希望对大家学习C语言有所帮助。

本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发者,想进一步提升者。如果您对iOS开发有极高的兴趣,可以与我一起探讨iOS开发,一起学习,共同进步。如果您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列,然后在开始Objective C语言的学习,如果您遇到问题也可以与我探讨,另外将无偿分享自己整理出来的大概400G iOS学习视频及学习资料,都是干货哦!

 

一、category 分类

在C++中有强大的多重继承,而在oc中方法都是单继承的,为了模块化开发,便于团队开发,oc中有其他语言所没有的category(分类,类目,类别)和class Exetension(类扩展)等语法,可以在不修改原来类的基础上, 为这个类扩充一些方法.

Category的格式

1.在.h文件中声明类别

(1)新添加的方法必须写在 @interface 与 @end之间

(2)ClassName 现有类的类名(要为哪个类扩展方法) +

(3)CategoryName 待声明的类别名称

(4)NewMethod 新添加的方法

@interface ClassName (CategoryName) NewMethod;
//在类别中添加方法
//不允许在类别中添加变量
@end

   

注意:

不允许在声明类别的时候定义变量

在.m文件中实现类别:

(1)新方法的实现必须写在@ implementation与@end之间

(2)ClassName 现有类的类名

(3)CategoryName 待声明的类别名称

(4)NewMethod 新添加的方法的实现

category使用注意:

1. 分类只能增加方法, 不能增加成员变量

2. 分类中写property只会生成方法声明

3. 分类可以访问原来类中的成员变量

4. 如果分类和原来类出现同名的方法, 优先调用分类中的方法, 原来类中的方法会被忽略

分类的编译的顺序

方法调用顺序(从高到低) 分类 –>原来类 –>父类

分类应用场景:开发中经常使用的方法,可以抽出一个分类,团队开发中,多人共同开发,可以写多个分类,最后进行融合。

二、Exetention 匿名扩展

1.匿名扩展定义

延展类别又称为扩展(Extendsion),Extension是Category的一个特例

可以为某个类扩充一些私有的成员变量和方法写在.m文件中

英文名是Class Extension

2.扩展书写格式

在.m文件中

@interface 类名 ()
{
    int _age;
}
- (void)say;

@end

   

三、Block

1.Block简介

Block是iOS中一种比较特殊的数据类型

Block是苹果官方特别推荐使用的数据类型, 应用场景比较广泛。

Block应用场景:

动画

多线程

集合遍历

网络请求回调

2.Block的作用

用来保存某一段代码, 可以在恰当的时间再取出来调用

功能有点类似于函数和方法。

3.Block的定义格式:

返回值类型 (^block变量名)(形参列表) = ^(形参列表) { 
};

(1)无返回值,无形参

void(^Myblock)() = ^{
NSLog(@”Hello”);
};

   

(2)有返回值,有形参

int(^MyBlock)(int,int) = ^(int a,int b){
return a +b;
};

   

(3)无返回值,有形参

void(^MyBlock)(int) = ^(int num){
for (int i = 0,i

   

三、Protocol 协议

1.protocol 基本概念

Protocol翻译过来, 叫做”协议”

(1)在写java的时候都会有接口interface这个概念,接口就是一堆方法的声明没有实现,而在OC里面Interface是一个类的头文件的声明,并不是真正意义上的接口的意思,在OC中接口是由一个叫做协议的protocol来实现的

protocol它可以声明一些必须实现的方法和选择实现 的方法。这个和java是完全不同的。

2.Protocol的作用:

用来声明一些方法,也就说, 一个Protocol是由一系列的方法声明组成的。

3.protocol 语法格式

(1)Protocol的定义

@protocol 协议名称
// 方法声明列表
@end

   

(2)类遵守协议

一个类可以遵守1个或多个协议

任何类只要遵守了Protocol,就相当于拥有了Protocol的所有方法声明.

4.protocol和继承区别

继承之后默认就有实现, 而protocol只有声明没有实现

相同类型的类可以使用继承, 但是不同类型的类只能使用protocol

protocol可以用于存储方法的声明, 可以将多个类中共同的方法抽取出来, 以后让这些类遵守协议即可。

5.协议中的两个关键字

有2个关键字可以控制方法是否要实现(默认是@required,在大多数情况下,用途在于程序员之间的交流)

@required:这个方法必须要实现(若不实现,编译器会发出警告)

@optional:这个方法不一定要实现

6.协议的局限性

协议是用来声明一大堆的方法,不能声明成员变量,也不能写实现方法,而某个类遵守了这个协议就可以进行协议中声明的方法的实现,这样虽然能解决OC的单继承问题,但是有类型的限制,不能够更好的做到程序的扩展性,那么在协议的基础上通过什么能够更具扩展性呢?答案是—— 代理。

7.协议的注意事项

(1)协议只能声明方法, 不能声明属性

(2)父类遵守了某个协议, 那么子类也会自动遵守这个协议

(3)在OC中一个类可以遵守1个或多个协议

注意: OC中的类只能有一个父类, 也就是说OC只有单继承

(4)OC中的协议又可以遵守其它协议, 只要一个协议遵守了其它协议, 那么这个协议中就会自动包含其它协议的声明。

8.协议的应用场景及注意点

(1)做类型限定

类型限定就是限定一个类必须遵守某个协议

数据类型<协议名称> 变量名

@proterty(nonatomic , strong)dog< DogRunning > *dog;

   

(2)类型限定的注意点

1.类型限定是写在数据类型的右边的

2.虽然在接受某一个对象的时候, 对这个对象进行了类型限定(限定它必须实现某个协议),

3但是并不意味着这个对象就真正的实现了该方法. 所以每次在调用对象的协议方法时应该进行一次验证

if([self.dag respondsToSelect:@selector(run)]){
    [self.dog run];
}

   

四、委托代理

1.什么是设计模式?

在计算机编程语言中有32种设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样,在iOS中常用的实际模式为:代理方法,MVC模式,MVVC模式,单例模式等。

2.代理设计模式

代理模式是iOS开发中非常重要的一种设计模式,在UI中用的最多,有以下两种情况:

(1)当对象A发生了一些行为,想告知对象B(让对象B成为对象A的代理对象)对象B想监听对象A的一些行为(让对象B成为对象A的代理对象)

(2)当对象A无法处理某些行为的时候,想让对象B帮忙处理(让对象B成为对象A的代理对象)

3.代理编写规范

(1)一般代理属于谁,就写在谁的头文件中定义。

(2)协议的名称一般以他得属性的那个类的类名开头,后面跟上Protocol或者Delegate。

(3)协议中的方法名称一般以协议的名称Protocol之前的作为开头。

4.接受遵守协议的代理对象关键字

id关键字接受遵守协议的代理

@property(nonatomic,weak)id< DogDelegate>dog;

   

5.实现代理的步骤

发出代理者:

(1)声明一个类: @class 类名

(2)定义代理协议

(3)将代理作为属性,类型限定代理遵守协议

(4)声明方法,方法里调用代理,调用代理实现的协议方法

接受代理者

(5)带入代理

(6)遵守代理

(7)实现协议中的方法

发出的代理者

(8)实现调用代理者的方法

判断代理是否实现了协议中的方法

如果代理实现了代理中的方法,就调用

if ([self.delegate respondsToSelector:@selector(eat:)]) {
        [self.delegate eat:self];
        }

   

@class与#import的区别,两个点:

(1)作用上得区别:

·#import会包含引用类的所有信息(内容),包括引用类的变量和方法 .@class仅仅告诉编译器有这么一个类,具体这个类有什么信息,完不知

(2 )效率上得区别.

如果有上百个头文件都#import了同一个文件,或者这些文件依次被#import,那么一旦最开始的文件有改动,后面引用到这个文件的所有类都需要重新编译一变,效率非常低。

本文由职坐标整理并发布,了解更多内容,请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程