OC-hello, world
你好, 世界
--1-- Xcode创建OC项目 1.1 OC命令行项目 --2-- NSLog函数和@符号 2.1 NSLog的介绍 2.2 NSLog使用方法 2.3 NS前缀的含义 2.4 @符号 --3-- OC和C差异学习 3.1 源文件对比 3.2 基本语法对比 3.3 OC新增的数据类型介绍 3.4 OC中的新增异常捕获方法 --4-- 面向对象 4.1 编程的实质 4.2 面向对象的基本概念 --5-- 类和对象 5.1 类和对象 5.2 类的声明和实现 5.3 对象的存储细节 ----------------------------【写在开头:】
『
关于hello, world的由来,在C语言的博客中已经说了,在此,还是用这句话,来向iOS的学习之路开一个头。
苹果于2014年6月发表了swift。2015年6月8日,在WWDC2015上宣布,Swift将开放源代码,包括编译器和标准库。
但其Cocoa和Cocoa Touch等框架及现在很多公司的iOS程序还是以OC编写的,所以学习OC是必要的。
注意:
OC并不是一门全新的语言
OC完全兼容C语言
可以在OC代码中混入C语言代码,甚至是C++代码
可以使用OC开发Mac OS X平台和ios平台的应用程序
Objective-C,通常写作ObjC或OC,较少用Objective C或Obj-C,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。
Objective-C是面向对象的语言
由布莱德·考克斯(Brad Cox)基于Smalltalk改进而来遵从ANSI C标准C语法,同时使用了Smalltalk的方法,在运行时可以灵活处理所有情,运行时(runtime)非常灵活,具有如下特性:
Dynamic Binding 动态绑定
Dynamic Typing 动态检查
Dynamic Linking 动态链接
』
--1-- Xcode创建OC项目
1.1 OC命令行项目
使用Xcode快速创建项目:
1)选择项目类型
2)填写相应的项目信息
创建完成-->
--2-- NSLog函数和@符号
2.1 NSLog的介绍
NSLog是cocoa的框架中提供的一个方法,定义在NSObjcRuntime.h中:
FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
实际上,NSLog很像printf,同样会在console中输出显示结果,不同的是,传递进去的格式化字符是NSString的对象,而不是char *这样的字符串指针。
NSLog和printf使用的差异
1)NSLog 会自动换行 ,而printf不会自动换行
2)NSLog会自动输出时间等项目信息(日志形式),而pritnf不会输出调试信息
3)NSLog函数的参数是一个NSString对象,printf是一个字符串指针
2.2 NSLog使用方法
int a = ;
float f1 = 2.3f;
double d1 = 3.14;
char ch = 'X';
char *str = "hello"; //能够运行,说明OC向下兼容C
printf("%d,%.2f,%.2f,%c\n", a,f1, d1, ch);
printf("%s\n", str);
printf("----------------\n"); //NSLog格式化输出
NSLog(@"%d,%.2f,%.2f,%c", a,f1, d1, ch); //str是用字符串指针定义的,所以这里可以用%s格式化输出,但如果是NSString,则不能这样格式化输出字符串
NSLog(@"--->%s", str);
printf("----------------\n"); //OC中自己特有的字符串表示方法
NSString *str1 = @"听雨";
//NSLog(@"%s", str1); //不能使用%s输出
NSLog(@"%@", str1); //正确输出 //使用printf能够打印str1吗?
//pritnf("-->%@\n", str1); //不能,NSString是OC特有的C不支持
2.3 NS前缀的含义
NSArray,NSString等NS前缀的类、函数归属于cocoa Fundation基础类库,其"NS”的由来据说是这样的:乔布斯被苹果开除后,创立了NeSt公司,而cocoa Fundation基础类库就是出自于NeST公司,NeST中的"NS"被作为Fundation中所有成员的前缀。
2.4 @符号
在OC中"@"符号有特殊的用途
1)@""; 这个符号表示将一个C的字符串转化为OC中的字符串对象NSString
2)@标识符 OC中大部分的关键字都是以@开头的,比如@interface,@imlementation,@end,@class等。
--3-- OC和C差异学习
3.1 源文件对比
C语言中常见的后缀是:
.c .o .out .h .m
在OC中常见的文件有两种:.h和.m的文件
扩展名 |
源类型 |
.h |
头文件,头文件包含方法,属性的声明。 |
.m |
类的实现文件,参与编译的文件,用来实现类中声明的方法 |
3.2 基本语法对比
1)数据类型对比学习
2)变量的定义对比
3)流程控制语句对比
新增:增强型for循环,可以快速遍历数组、字典等集合
3.3 OC新增的数据类型介绍
逻辑型
1)Boolean(布林)
Boolean 类型指的是用于存储真值和假值的变量,一般用于程序流程控制
Boolean类型数据允许取值true或false,也可以是0或非0的整数替换true和false,这点和java语言不同
如C中是1和0表示真假,OC中也可以用true表示真 false表示假
用来存放true和false的结果的变量一般声明为Boolean
@autoreleasepool {
Boolean flag = false;
NSLog(@"%d", flag); //
}
2)BOOL也是存放逻辑值的另外一种方法
BOOL //它的取值是YES和NO
YES 1 真
NO 0 假
BOOL flag2 = NO; if (flag2){ NSLog(@"%d", flag2); // }
3.4 OC中的新增异常捕获方法
//注意:try catch并不能检测所有的错误
@try {
//可能出错的语句
}
@catch (NSException *exception) {
//异常捕获
}
@finally {
//一定要执行的语句
}
--4-- 面向对象
4.1 编程的实质
软件编程就是将我们的思维转变成计算机能够识别的语言的一个过程。
4.2 面向对象的基本概念
面向对象是相对面向过程而言的
面向过程是要关注整个过程的每一步
而对象是关注对象所具有的行为和属性。
面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程范型,同时也是一种程序开发的方法。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。
优点:
大幅度提高软件项目的成功率
减少维护成本
提高可移植性和可靠性
面向对象设计的三个主要特征
封装性
多态性
抽象性
(还有一个继承)
--5-- 类和对象
5.1 类和对象
类(class)
在面向对象程序设计,类(英语:class)是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。
类的更严格的定义是由某种特定的元数据所组成的内聚的包。它描述了一些对象的行为规则,而这些对象就被称为该类的实例。类有接口和结构。接口描述了如何通过方法与类及其实例互操作,而结构描述了一个实例中数据如何划分为多个属性。类是与某个层(这里的层指类型层次中连接时模块依赖性相同的类的集合,即某环境下可重用性相同的组件的集合。)的对象的最具体的类型。类还可以有运行时表示形式(元对象),它为操作与类相关的元数据提供了运行时支持。
对象(object)
在计算机科学中,对象(英语:object),台湾译作物件,是一个内存地址,其中拥有值,这个地址可能有标识符指向此处。对象可以是一个变量,一个数据结构,或是一个函数。是面向对象(Object Oriented)中的术语,既表示客观世界问题空间(Namespace)中的某个具体的事物,又表示软件系统解空间中的基本元素。
如下图中,图纸是类,汽车就是对象
类与对象之间的关系
类(Class)一个类由3个部分构成
类的名称:类名
类的属性:一组包含数据的属性
类的方法:允许对属性中包含的数据进行操作的方法
对象(Object)
是系统中的基本运行实体
对象就是类类型(class type)的变量
定义了一个类,就可以创建这个类的多个对象
一个类是具有相同类型的对象的抽象
一般使用“名词提炼法”来提取类的抽象
5.2 类的声明和实现
1)关于类的几个名词
.h:类的声明文件,用于声明成员变量、方法。类的声明使用关键字@interface...@end
注意:.h的方法只是做一个声明,并不对方法进行实现,也就是说,只是说明一下方法名、方法的返回值类型、方法接收的参数类型而已,并不会编写方法内部的代码。
.m: 类的实现文件,用于实现.h中声明的方法,类的实现使用关键字@implementation...@end
方法
方法的声明和实现,都必须以 + 或者 - 开头
"+" 表示类方法(静态方法)
"-" 表示对象方法(动态方法)
成员变量(实例变量\属性)
成员变量的作用域有3种:
@public 全局都可以访问
@protected 只能在类内部和子类中访问
@private 只能在类的内部访问
2)类的定义分为两部分:
1)类的声明(声明当前类的类名、属性、行为)
@interface 类名:父类名
{
//定义类的属性
} //定义类的行为 @end //表示结束
2)类的实现(实现类的具体行为)
@implementation 类名 //行为的具体实现 @end
5.3 对象的存储细节
用类来创建对象,每个对象在内存中都占据一定的存储空间,每个对象都有一份属于自己的单独的成员变量,所有的对象共用类的成员方法,方法在整个内存中只有一份,类本身在内存中占据一份存储空间,类的方法存储于此。
Person类
Person.h
//Person类声明
@interface Person : NSObject
{
@public //公有属性
NSString *_name;
int _age;
}
-(void)run; @end
Person.m
//Person类实现
@implementation Person
-(void)run{
NSLog(@"%@正在跑", _name);
} @end
创建对象及调用其方法
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建Person
Person *person = [Person new];
person->_name = @"柯南"; //设置成员属性
person->_age = ;
NSLog(@"name->%@, age->%d", person->_name, person->_age);
[person run]; //调用对象方法
}
return ;
}
创建对象[Person new]时做了3件事情:
1,申请内存空间
2,给实例变量初始化
3,返回空间的首地址
问题:
1、申请的空间在内存的哪个区?
new时,申请的空间在内存的堆区(动态分配的内存空间)
初始化时,如果实例变量是基本数据类型,此时初始化为0
如果是OC字符串类型,则初始化为null
2、实例变量又保存在什么地方
实例变量保存在内存中的堆区
指针变量p存放在栈区
3、对象方法保存在什么地方
-->代码区
4、为什么使用[person run];就可以调用方法了?如何调用?
先找到p对应的堆区空间-->找到_isa指针-->找到_isa指向的代码区空间-->在该空间中找到方法
【写在结尾:】
『hello, world』
OC-hello, world的更多相关文章
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- 用C语言封装OC对象(耐心阅读,非常重要)
用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...
- 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比
C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...
- 嵌入式&iOS:回调函数(C)与block(OC)回调对比
学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...
- WebViewJavascriptBridge源码探究--看OC和JS交互过程
今天把实现OC代码和JS代码交互的第三方库WebViewJavascriptBridge源码看了下,oc调用js方法我们是知道的,系统提供了stringByEvaluatingJavaScriptFr ...
- OC泛型
OC泛型 泛型是程序设计语言的一种特性,他主要是为了限制类型的,比如OC中的数组,你可以限制他里面装的是NSString类型,泛型的话JAVA和C++都有的,大家要是对泛型不了解的话可以去百度一下. ...
- iOS学习15之OC集合
1.数组类 1> 回顾C语言数组 数组是一个有序的集合, 来存储相同数据类型的元素. 通过下标访问数组中的元素,下标从 0 开始. 2> 数组 数组是一个有序的集合,OC中的数组只能存储对 ...
- JS 与OC 交互篇
完美记录交互 CSDN博客: (OC调用JS) http://blog.csdn.net/lwjok2007/article/details/47058101 (JS调用OC) http://blog ...
- OC中加载html5调用html方法和修改HTML5内容
1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webViewDidFinishLoad: 4.在代理方法中进行操作H ...
- iOS开发--JS调用原生OC篇
JS调用原生OC篇 方式一(反正我不用) 第一种方式是用JS发起一个假的URL请求,然后利用UIWebView的代理方法拦截这次请求,然后再做相应的处理. 我写了一个简单的HTML网页和一个btn点击 ...
随机推荐
- PHPUnit入门
PHPUnit是PHP语言的单元测试框架.工具,xunit单元测试工具系列成员之一,可以单独运行在Linux或windows系统下面,也可以集成到zend studio等IDE工具中. 工具下载:ht ...
- 总结-jQuery
一.ajax提交,如果某个变量的值填的是doc对象,jQuery不报错,也没有反应,如: {userName : $('#userName')}.正确的写法 {userName : $('#userN ...
- Clock rate
https://en.wikipedia.org/wiki/Clock_rate The clock rate typically refers to the frequency at which a ...
- Assign an Elastic IP Address to Your Instance
By default, an instance in a nondefault VPC is not assigned a public IP address, and is private.You ...
- [SonarQube]小结
新的项目用了这个,以前从来没用过,配置了一下,看看这个到底是个什么东东. 先学习一下英文单词: sonar 声纳, qube 方盒子, 连起来应该叫声纳盒, SonarQube一看就是一个监测诊断设备 ...
- Win32 设置窗口透明度 SetLayerTransparent
注意: 在调用SetLayeredWindowAttributes 之前,需要给窗口加上WS_EX_LAYERED属性,否则会无效 void SetLayerTransparent(HWND hWnd ...
- ubuntu 上安装字体
http://www.360doc.com/content/11/0901/23/4171006_145128703.shtml http://www.linuxidc.com/Linux/2008- ...
- Cent0S 升级Python会带来的问题
CentOS是linux的几个Distrubution中比较容易让初学者拿来学习的一个版本,以下记录一下在学习过程中遇到的一些问题以及解决方法: 1.在WIN7下,我最初尝试安装7.0版本的,后来一直 ...
- 我的AngularJS 学习之旅
我的AngularJS 学习之旅 基础篇 1.Angular的 起源 2.比较Web 页面实现的几种方式 3.一些基本术语 4.Angular与其他框架的兼容性 5.总结 6.综合实例 很早之前就 ...
- 网页3D引擎“Babylon.JS”入门教程翻译总结
使用三个月的业余时间把官方教程的入门部分译为中文并上传到github,在下一步编程前做一个总结. 历程: 最早接触游戏编程是在大三下学期,用汇编语言和实验室里的单片机.触摸屏.电机(提供声效)编的打地 ...