————————Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ————————
Objective-C的是编写 OS X和iOS软件 的主编程语言。一般将OC看成是C编程语言的一个超集。 Objective-C继承了C语言的语法,基本数据类型和程序控制流程,并在此基础上增加了语法定义的类和方法,并提供面向对象的功能和动态运行。所有它对C语言是完全兼容的。
在C语言中我们使用一些系统自带的函数需要用 #include<头文件> 包含头文件,在OC中也是一样,只不过在OC中我们使用#import。
#import和#include一样:<> : <系统文件> 、 "" : " 自己写的文件"
#import 和 #include一样都有拷贝文件内容的作用,只不过增加一个功能,就是防止文件内容重复拷贝。也就在声明文件中不需要再写预处理指令 -->条件编译了,
在C语言中我们预防文件重复拷贝是通过
# ifndef 宏定义
# define 宏定义
文件内容
#endif
OC中的字符串是这种新式: @“OC字符串”, 比C语言多个@
OC中输出语句则变成 NSLog
NSLog比print有个新功能就是会在结束时自动换行
NSLog是系统自带函数需要调用系统文件则要包括头文件:Foundation/NSObjeCRuntime.h文件
NSObjeCRuntime.h中包含NSLog函数的声明,它也是属于Foundation框架的。
Foundation框架的头文件路径是:Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundation.framework
我们在上述路径中回看到很头文件,如果一个个包含会非常麻烦,这时就利用到我们的主头文件。Foundation.h 它包含了Foundation框架中的所有头文件
下次我们在写头文件包含只需要 #import <Foundation/Foundation.h>
我们在终端调试OC时,用的命令行和C语言也不一样,
编译: cc -c
链接: cc 文件名 -framework Foundation 编译链接一起来,也是cc 文件名 -framework Foundation
运行: ./a.out
第二个OC程序
<span style="font-size:14px;">#import <Foundation/Foundation.h>
int main()
{
// NSLog输出内容会自动换行
NSLog(@"第2个OC程序!!!");
return 0;
}</span>
OC也可以像C语言一样文件包含。多个文件一起编译。
OC中的BOOL类型 YES ==1 NO ==0
BOOL类型的本质
typedef signedchar BOOL;
BOOL类型的变量有2种取值:YES、NO
#define YES (BOOL)1
#define NO (BOOL)0
BOOL的输出(当做整数来用)
NSLog(@"%d\n%d",YES,NO);
OC是作为一个面向对象的语言。
面对对象思想:就像是简单的创造一个“生命”,你赋予他属性和行为,如果要利用他的行为,就可以直接调用他来完成你所要完成的行为,其中他的属性可以被你改变。
万物皆是对象,将事物的共性抽象成为类
用类来创建对象,所以我们要先学会创建类
第一个类
1.类的设计:包含类的,名字,属性,功能。
-->类名
*类名的第一个字母必须是大写
*不能有下划线
*多个英文单词,用驼峰标识
类分为两个部分,和写一个函数一样,需要声明和实现两个部分。
1、类的声明
包括:类的属性,类的行为、功能的声明
格式:
@interface 类名 :父类
@end
2、类的实现
就是将声明里的方法、功能,写出来。
格式:
@implementation 类名
@end
例子:写一个车类
类名:Car
属性:轮胎个数,时速(速度)
行为:跑
<span style="font-size:14px;">// 1.类的声明
// 声明对象的属性、行为
// : NSObject 目的是:让Car这个类具备创建对象的能力
@interface Car : NSObject
{// 用来声明对象属性(实例变量\成员变量,默认会初始化为0)
// @public可以让外部的指针间接访问对象内部的成员变量
@public
int wheels; // 轮胎个数
int speed; // 时速(xxkm/h)
}
// 方法(行为):方法名、参数、返回值(声明、实现)
// 只要是OC对象的方法,必须以减号 - 开头
// OC方法中任何数据类型都必须用小括号()扩住
// OC方法中的小括号():括住数据类型
- (void)run;
@end
// 2.类的实现
// 用来实现@inteface中声明的方法
@implementation Car
// 方法的实现(说清楚方法里面有什么代码)
- (void)run
{
NSLog(@"车子跑起来了");
}
@end</span>
对象的创建:在OC中我们利用类来创建对象
现在我们用上面写好的Car类创建一个Car对象 : [Car new]
[Car new] 每次都会创建一个新的对象,并且放回新对象本身
在OC中我们用指向对象的指针来存储对象: Car *p = [Car new];
如何给对象的属性赋值
这有点像C语言的结构体
比如调用给Car对象的速度属性赋值:p-->speed = 30;
OC中调用对象行为
格式:[行为执行者 行为名称];
比如调用Car跑的行为:[p run];
类和对象的内存结构图
这是一个人类。创建了两个人对象,分别用p,和p2两个指针指向两个人对象。用人类创建出来的对象里面都有一个isa指针。来指向类。在这里就是人类。
我们创建的对象中只存储属性,不存储方法,在调用方法的时候回到类中调用。
对象方法和函数注意点
方法
1.对象方法都是以减号 -
2.对象方法的声明必须写在@interface和@end之间
对象方法的实现必须写在@implementation和@end之间
3.对象方法只能由对象来调用
4.对象方法归类\对象所有
函数
1.函数能写在文件中的任意位置(@interface和@end之间除外),函数归文件所有
2.函数调用不依赖于对象
3.函数内部不能直接通过成员变量名访问某个对象的成员变量
没有指针指向的对象叫匿名对象,最好别写。后面内存管理会说。
————————Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ————————