1.2.1 OC概述
本文并非最终版本,如想关注更新或更正的内容,详见文末的联系方式,如有疏忽和遗漏,欢迎指正。
本文相关目录:(链接为简书链接)
====================== 所属文集:1.2 Objective-C ======================
1.2.0 开发须知
1.2.1 OC概述
1.2.2 类 未发布
1.2.3 对象 未发布
1.2.4 面向对象 未发布
1.2.5 数据类型 未发布
1.2.6 关键字 未发布
1.2.7 内存管理->1.0 概述 未发布
1.2.7 内存管理->2.1 MRC(手动引用计数) 未发布
1.2.7 内存管理->2.2 ARC(自动引用计数) 未发布
1.2.8 Category - 分类 未发布
1.2.9 Protocol - 协议 未发布
====================== 所属文集:1.2 Objective-C ======================
本文目录

1、OC简介

OC 发展:

OC 特点:

C、OC、C++、C#之间的关联

2、 新建 OC 项目步骤

步骤1:打开Xcode,创建一个新项目

步骤2、选择项目模板(Xcode 8+)

步骤3、填选项目相关信息

步骤4、编写代码,选择模拟器,运行(Command+R),并查看运行结果。
3、 第一个 OC 程序分析

总体分析
// #import 表示将该文件的信息导入到程序中
// 作用:告诉编译器找到并处理名为Foundation.h文件,这是一个系统文件
// 把Foundation.h引入了,等于把OC的库文件都引过来了
#import <Foundation/Foundation.h>
// 程序的入口 (argc表示参数数目 argv表示参数值)
int main(int argc, const char * argv[]) {
// 这是一个自动释放池,用于回收对象的存储空间
@autoreleasepool {
// NSLog是Foundation框架提供的Objective-C日志输出函数,与标准C中的printf函数类似,并可以格式化输出。
// @“Hello, World!”,是代表NSString字符串对象,它是Objective-C常用的字符串类。
NSLog(@"Hello, World!");
}
// 表示要终止main的执行,一般情况下0代表正常结束,非0代表异常情况, 这是沿用了C语言的习惯
return 0;
}
具体分析:
// "xxx" 首先在当前文件找xxx文件,否则在开发工具里面找,否则在系统中找
// <xxx> 首先在编译器环境找xxx文件,否则在系统的环境里找
#include <stdio.h> // 可以使用C语言的 printf 输出函数
// 预处理指令 import 的功能和 include一样, 是将右边的文件拷贝到当前import的位置
// import优点: 会自动防止重复拷贝(意味着如果头文件写了N次,那么import只会拷贝一次)
// Foundation.h我们称之为主头文件, 主头文件中又拷贝了该工具箱中所有工具的头文件, 我们只需要导入主头文件就可以使用该工具箱中所有的工具, 避免了每次使用都要导入一个对应的头文件
// 规律: ① 所有的主头文件的名称都和工具箱的名称一致 ② 所有的主头文件都导入了该工具箱中所有工具的头文件
// 工具箱的地址: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks
#import <Foundation/Foundation.h> // 可以使用OC语言的 NSLog 输出函数
int main(int argc, const char * argv[]) {
// printf - C中的日志输出函数
// printf不能自动换行
// printf不会输出调试信息
// printf()输出字符串的时候,用的是%s
// printf是一个字符串常量指针
// printf不能打印OC中的字符串
// printf不能打印OC中的对象 (%@占位符不能用),没有结果
printf("c hello world\n");
printf("c hello world\n");
// NSLog - OC中的日志输出函数
// NSLog会自动换行
// NSLog在输出内容时会附加一些系统信息(如时间等项目信息)
// NSLog()输出字符串的时候,用的是%@
// NSLog输出OC的特有的类型 %@(NSString), NSLog 函数的参数是一个NSString 对象
// NSLog在使用NSLog的时候,在格式控制字符串的末尾加上一个\n是不起作用
NSLog(@"OC hello World");
NSLog(@"OC hello World");
// 在oc程序中,使用oc的打印(NSLog),调用了c的函数(sum),输出其结果
NSLog(@"sum = %i", sum(20, 10));
return 0;
}



官方类前缀:



第三方类前缀:


4、OC和C的差异
源文件对比:


基本语法对比:

关键字对比:



数据类型对比:




流程控制语句对比:

函数与方法的定义和声明对比:

面向对象新增特性:

面向对象新增语法:

新增异常捕捉方法:

格式:
@try {
< #statements#>
}
@catch (NSException *exception) {
//捕捉最具体的异常类型
< #handler#>
}
@catch (NSException *ne) {
//捕获一个比较重要的异常类型。
}
@catch (id ue) {
//再次掷出捕获的异常。
}
@finally{
//不管有没有异常finally内的代码都会执行。
< #statements#>
}
举例:
#import "ViewController.h"
@interfaceViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
//注意:try catch 并不能检测所有的错误
@try { //此处放的是有可能出错的代码
NSString *str = @"abc";
NSLog(@"要出异常了");
[str substringFromIndex:111];
} @catch (NSException *exception) { //此处放出错以后,我们处理的代码
NSLog(@"捕捉到的异常");
NSLog(@"exception = %s%@",__FUNCTION__, exception);
} @finally { //不管出没出错,这里的代码一定会执行
printf("一定会执行的代码!\n");
}
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.}
@end
打印结果:
Test[14869:2214622]要出异常了
Test[14869:2214622]捕捉到的异常
Test[14869:2214622] exception = -[ViewController viewDidLoad]***-[__NSCFConstantString substringFromIndex:]: Index 111 out of bounds; string length 3
一定会执行的代码!
说明:
异常捕捉方法是检测oc 中方法是否正确使用,不能用来检测语法错误。只能用来检测方法使用的正确与否。
作者:蓝田(Loto)
【作品发布平台】
① 简书
② 博客园
③ Gitbook(如果觉得文章太长,请阅读此平台发布的文章,记得给个Star哟~)
【代码托管平台】
Github(帮忙点点Star啦~)
【如有疑问,请通过以下方式交流】
① 评论区回复
② 发送邮件至 shorfng@126.com
本文版权归作者和本网站共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,谢谢合作。
如果觉得作者很用心,也可以请我喝杯咖啡
支付宝扫一扫 向我付款

你也可以微信 向我付款

1.2.1 OC概述的更多相关文章
- OC语法1——OC概述
Object-C简介: OC,即Object-C,iOS开发的核心语言.它是基于C语言的,在C的基础上做了面向对象的封装,所以OC是面向对象的语言.同时也因此OC是兼容C的,也就是说在iOS开发中,可 ...
- iOS学习10之OC类和对象
本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...
- Object-C目录
Object学习目录: 1.OC概述 2.OC第一个应用程序 3.OC之类和对象(属性.方法,点语法) 4.OC之类的扩充(self,super关键字.继承.构造函数等) 5.OC之分类Categ ...
- 一、初始Object-C
一.OC概述 特点: 1没有包得概念 2关键字以@开头 3.拓展名 .m 二.第一个OC类 1,分为2个文件..m和.h文件 2. .m文件用来实现类 .h用来定义声明类 .h文件中得写法 //@i ...
- (转载)OC学习篇之---概述
前言 终于开启了OC的学习篇了,之前由于工作上的事,学习就一直搁浅了,不过最近由于各种原因,感觉必须要开启iOS的开发旅程了,不然就老了.因为之前一直是做Android的,所以学习iOS来就没那么费劲 ...
- O-C相关04:类方法的概述与定义和调用
类方法的概述与定义和调用 1, 类方法的概述 类方法(class method)在其他编程语言中常常称为静态方法(例如 Java 或 C# 等). 与实例方法不同的是,类方法只需要使用类名即可调用, ...
- iOS学习15之OC集合
1.数组类 1> 回顾C语言数组 数组是一个有序的集合, 来存储相同数据类型的元素. 通过下标访问数组中的元素,下标从 0 开始. 2> 数组 数组是一个有序的集合,OC中的数组只能存储对 ...
- iOS-UI-UI控件概述
以下列举一些在开发中可能用得上的UI控件: IBAction和IBOutlet,UIView 1 @interface ViewController : UIViewController 2 3 @p ...
- OC笔记一:Objective-C简介
1.OC简介 全称:Objective-C,是扩充C的面向对象编程语言,主要用于iOS和Mac OS开发. C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码 ...
随机推荐
- 第3月第23天 EAIntroView
1. EAIntroView,界面和模型分离.EAIntroPage数据模型,EAIntroView界面. https://github.com/ealeksandrov/EAIntroView
- gulp 实现 js、css,img 合并和压缩
前提条件,知道如何安装nodejs.gulp,这里不做介绍,可以自行google 实现此功能需要安装的gulp工具有如下 npm install gulp-htmlmin gulp-imagemin ...
- Open xml 操作Excel 透视表(Pivot table)-- 实现Excel多语言报表
我的一个ERP项目中,客户希望使用Excel Pivot table 做分析报表. ERP 从数据库中读出数据,导出到Excel中的数据源表(统一命名为Data),刷新Pivot table! 客户还 ...
- scanf_s
很多带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,有时hacker可以利用原版的不安全性黑掉系统 例如: ANSI C中没有scanf_s(),只有s ...
- bzoj4314
首先,我们考虑原题取消k的限制后怎么做. 设(xy)是一个n次单位根,f(x)=(1+x^0)*(1+x^1)*(1+x^2)*...*(1+x^n-1) 参见 http://bx2k.is-prog ...
- ngSanitize和$sce
(angular-ngSanitize模块-$sanitize服务详解) 本篇主要讲解angular中的$sanitize这个服务.此服务依赖于ngSanitize模块. 要学习这个服务,先要了解另一 ...
- cstring to char *例子
Cstring m_strDescPath = ""; //类的成员变量 //"打开文件"对话框,选择文件,返回其路径 m_strDescPath = Boot ...
- .NET+IIS+MSSQL配置
好久没配置.NET+IIS+MSSQL了,跟以前不大一样了.总结下吧. 环境: Windows Server 2012 标准版 x64 SQL Server Express 2014 一.HTTP E ...
- 还敢说你是程序员?一律师闲着没事写了个app,用户量600万
今天周五,是我在上海上班的第五天. 这几天怎么说呢,跟混日子差不多,因为处处有“”惊喜”. 上班第一天领来办公电脑,登上自己的公司邮箱,惊喜来了!我的擦擦擦,全TM是英文呐!作为一个从村儿里来的码农, ...
- ubantu php7.0版本降级到php5.6
http://askubuntu.com/questions/756879/cant-install-php5-on-ubuntu-16-04





