Objective-C基础笔记一
这里开始了我OC旅程
花了8天的时间粗略的学习了新知识Objective-C(简称OC),虽然只是学习了其中的基础部分,但经过这一周的学习也算是入门了。对面向对象的封装、继承、多态以及其中所包含的方法等有了初步的认识。
现正好是五一小假期做笔记整理,下面直奔主题总结笔记:
目录
Objective-C简介(了解)
本小节知识点
【了解】Objective-C简介
【了解】Objective-C发展现状
【了解】Objective-C语言学习路线及重难点
【了解】学习目标
1. Objective-C简介
- Objective-C是一种面向对象的计算机语言
- OC不是一门全新的语言
- C语言的基础上增加了一层最小的面向对象语法
- OC完全兼容C语言
- 可以在OC代码中混入C语言代码,甚至是C++代码
- 可以使用OC开发Mac OS X平台和iOS平台的应用程序
2. Objective-C发展现状
1986年,BradCox(布莱德·考克斯)在第一个纯面向对象语言Smalltalk基础上写成了Objective-C语言。
1985年,被赶出苹果公司的Steve Jobs成立了NeXT公司,致力于开发强大且经济的工作 站。NeXT选择Unix作为其操作系统
1988年Steve Jobs获得了Objective-C的使用版权,使用Objective-C来编写NeXTSTEP操作系统,Objective-C使得设计NeXTSTEP操作系统更加容易
1994,NeXT与Sun共同制定OpenStep API标准,其中两个重要的部分是Foundation跟 Application Kit,此时开始使用命名前缀NS。
在1995年,NeXT从Stepstone得到了Objective-C全部版权
1996 Steve Jobs重回苹果公司,把OpenStep用于 Mac OS X操作系统开发,它的版本和开发环境叫Cocoa,使用 Objective-C作为基础语言,开发工具Xcode和Interface Builder。
2007 苹果公司推出Objective-C2.0,Objective-C是Mac OS X和 iOS开发的基础语言。
Objective-C编程语言排名
- 2009年 排名32
- 2010年 排名8
- 2011年 排名6
- 2014年 排名3
- 2015年 排名4(因为Swift一直在上升)
- 2015年 排名13(因为Swift还在上升)
编程语言排名网站:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
问题1:OC阶段的学习目标是什么?
答: 学习目标:
语法学习
建立面向对象思维能力
建立基本项目需求分析能力
问题2:OC中主要开发在什么平台上的应用程序?
答:可以使用OC开发Mac OS X平台和iOS平台的应用程序
C和OC对比
本小节知识点
【理解】源文件对比
【掌握】关键字对比
【掌握】数据类型对比
【了解】流程控制语句对比
【掌握】函数(方法)定义和声明对比
【理解】面相对象新增特性
【了解】面向对象新增语法
【了解】新增异常处理
1.源文件对比
- C语言中常见源文件.h头文件,.c文件
- .h 头文件,用于存放函数声明
- .c C语言源文件,用于实现头文件中声明的方法
- OC中的源文件.h头文件,.m与.mm的实现文件
- .h 头文件,头文件包含类、方法、属性的声明。
- .m/.mm 类的实现文件,参与编译的文件,用来实现类中声明的方法
2.关键字对比
- C语言的关键字都可以在OC源程序中使用
- OC新增的关键字在使用时,注意部分关键字以"@"开头
3.数据类型对比
- OC包含C中所有的数据类型;但比C增加了其他几个数据类型,如下:
BOOL 只有两个取值真YES和假NO
NSObject * OC中的对象类型
id 动态对象类型,万能指针
SEL 选择器数据类型
block 代码块数据类型
OC中的类
- Objective-C是一种面向对象的语言,定义类是它的基本能力。
- 那什么是类呢?类是用来描述对象的,它是一系列方法和属性的集合
- Objective-C的类声明和实现包括两个部分:接口部分和实现部分。
- 想要定义方法也就C语言中的函数,那么就必须先有类的存在
4 流程控制语句对比
- 4.1 C语言中使用的流程控制语句OC中都可以应用
if 语句
switch语句
while语句
do while语句
for语句
break关键字
continue关键字
OC中增加:增强for循环,用于快速迭代数组或者集合
- 4.2 C语言for循环
for (int i = 0; i < 10; i++){
printf(“%d”,i);
}
- 4.3 OC增强for循环
for (NSString *name in NSArray){
NSLog(@”%@”,name);
}
5.函数(方法)定义和声明对比
- 5.1 C语言中函数的声明和实现
函数声明:int sum(int a,int b);
函数实现:int sum(int a,int b){ return a+b; }
- 5.2 OC中的方法
方法声明:- (int)sum:(int) a andB:(int) b;
方法实现:- (int)sum:(int) a andB:(int )b{ return a+b; }
注意: 方法只能写在类里面, 而函数可以写在任何地方
对象方法,使用对象调用的方法
类方法,使用类名调用的方法
- 5.2.1 对象方法
- (id)initWithString: (NSString *)name;
- 5.2.2 类方法
+ (MyClass *)createMyClassWithString: (NSString *)name;
```
---
###6.面相对象特性
封装性
继承性
多态性
---
###7.面向对象新增语法
* 7.1 属性生成器
```objectivec
@property
@synthesize
//声明属性
@property (nonatomic,strong)NSString *name;
//合成属性(实现)
@synthesize name = _name;
```
* 7.2 分类
```objectivec
分类与继承
使用分类扩展类,无需子类化
@interface NSString (MyNSString)
- (NSString *) encryptWithMD5;
@end
```
* 7.3 协议
```objectivec
使用协议声明方法
协议类似于C#,java中的接口
@protocol MyProtocol
- (void)myProtocolMethod;
@end
```
* 7.4 Fundation框架
```objectivec
创建和管理集合,如数组和字典
访问存储在应用中的图像和其他资源
创建和管理字符串
发布和观察通知
创建日期和时间对象
操控URL流
异步执行代码
8.新增异常处理
用于处理错误信息
格式:
@try .... @catch .... @finally
示例:
//创建对象car
Car *car = [Car new];
@try {
//调用一个没有实现的方法
[car test];
}@catch (NSException *exception) {
NSLog(@"%@",exception.name);
}@finally {
NSLog(@"继续执行!\n");
}
问题1:OC中新增关键字大部分是以什么开头?
答:OC中新增关键字大部分是以@开头
问题2:OC中新增加了那些数据类型?
答:
Block 类型
指针类型(Class, id类型)
空类型
特殊类型(SEL, nil)
问题3:面向对象特性是什么?
答: 封装性,继承性,多态性
第一个OC程序
本小节知识点
- 如何创建Objective-C项目
- 对比#import和#include区别
- NSLog 和printf区别
- “@”的使用方法
- NS前缀
1.如何创建Objective-C项目
1.1 创建工程
1.2 查看结果运行结果
2.#import和#include区别
#import与#include的类似,都是把其后面的文件拷贝到该指令所在的地方
#import可以自动防止重复导入
#import <> 用于包含系统文件
#import""用于包含本项目中的文件
#import , 告诉编译器找到并处理名为Foundation.h文件,这是一个系统文件,#import表示将该文件的信息导入到程序中。
框架地址: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneO S.sdk/System/Library/Frameworks/
3.NSLog 和printf区别
NSLog是Foundation框架
Objective-C基础笔记一的更多相关文章
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- php代码审计基础笔记
出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 --------------------------- ...
- MYSQL基础笔记(六)- 数据类型一
数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...
- MYSQL基础笔记(五)- 练习作业:站点统计练习
作业:站点统计 1.将用户的访问信息记录到文件中,独占一行,记录IP地址 <?php //站点统计 header('Content-type:text/html;charset=utf-8'); ...
- MYSQL基础笔记(四)-数据基本操作
数据操作 新增数据:两种方案. 1.方案一,给全表字段插入数据,不需要指定字段列表,要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致.凡是非数值数据,到需要使用引号(建议使用单引号)包裹. i ...
- MYSQL基础笔记(三)-表操作基础
数据表的操作 表与字段是密不可分的. 新增数据表 Create table [if not exists] 表名( 字段名 数据类型, 字段名 数据类型, 字段n 数据类型 --最后一行不需要加逗号 ...
- MYSQL基础笔记(二)-SQL基本操作
SQL基本操作 基本操作:CRUD,增删改查 将SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: Create da ...
- MYSQL基础笔记(一)
关系型数据库概念: 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库 关系模型:一种所谓建立在关系上的模型. 关系模型包含三个方面: 1.数据结构:数据存储的问题,二 ...
- JavaScript基础笔记二
一.函数返回值1.什么是函数返回值 函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...
- JavaScript基础笔记一
一.真假判断 真的:true.非零数字.非空字符串.非空对象 假的:false.数字零.空字符串.空对象.undefined 例: if(0){ alert(1) }else{ alert(2) } ...
随机推荐
- Spark系列(六)Master注册机制和状态改变机制
各组件的注册流程如下图: 注册机制源码说明: 入口:org.apache.spark.deploy.master文件下的receiveWithLogging方法中的case RegisterAppli ...
- Bone.io是一个轻量级的框架构建高性能实时单页HTML5应用程序
Bone.io允许你使用HTML5 WebSockets构建实时应用程序,提供“热”数据到浏览器.这使您可以轻松地构建丰富的,高度响应的用户界面. 项目主页:http://www.open-open. ...
- awk的二维数组
awk是不支持二维数组的,它的底层是一维数组,将两个key拼接为一维数组的key. 如下是其初始化和遍历 awk 'BEGIN{ for(i=0;i< 3; ++i) for(j = 0; j ...
- Python多线程学习资料1
一.Python中的线程使用: Python中使用线程有两种方式:函数或者用类来包装线程对象. 1. 函数式:调用thread模块中的start_new_thread()函数来产生新线程.如下例: ...
- java.lang.OutOfMemory总结分析
OOM浅析 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识 ...
- 推荐十款非常优秀的 HTML5 在线设计工具
网络有很多优秀的设计和开发工具可能大家都不知道,因此这篇文章就向设计师推荐十款优秀 HTML5 在线工具,这些工具能够帮助设计师们设计出更有创意的作品.随着 HTML5 技术的不断成熟,网络上涌现出越 ...
- SQL 错误1418
1.一个或多个服务器网络地址缺少完全限定域名(FQDN).为每个服务器指定FQDN,然后再次单击“开始镜像”.2.服务器网络地址"TCP://primary.test.com:5022&qu ...
- c++的操作符格式记录
以下摘自维基百科,mark一下,以备不时之需. For the purposes of this table, a, b, and c represent valid values (literals ...
- Castle ActiveRecord学习实践
Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架.AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务. ...
- ecshop的smarty库还原成smarty原生库方法
写过ecshop模板的人都晓得,他们是用所谓的dwt的文件来嵌套lbi文件进行模板的彼此调用.在咱们调取数据的时分,ecshop的默许模板只提供给咱们几个简略的句子进行调用,那么有没有办法能够把这个精 ...