Hello World代码学习
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
- 与C语言的区别 增加了面向对象的语法 将C的语法封装的更简单 OC完全兼容C语言
-
OC的源文件后缀名:.m。m-->message, 代表OC中最重要的一个机制:消息机制。
-
#import指令,是一个预处理指令,同一个文件无论import多少次,只会包含一次。
-
main函数是程序的入口和出口,int类型的返回值代表程序的结束状态。
-
Foundation框架 框架:是一个功能集,即一些函数和类的集合。
Foundation框架提供了最基础的功能,例如输入输出,一些数据类型。 -
@autoreleasepool 自动释放池
-
NSLog()
Foundation框架里的函数
作用:向控制台输出信息,输出信息还包括一些调试相关信息:执行这段代码的时间、程序的名称、进程编号、线程编号。
语法: NSLog(@"格式控制字符串",变量列表)
NSString
NSString类型的指针变量,专门用来存储OC字符串的地址。
OC的字符串必须写一个前缀@,例如:@"sddq"
NSString *str = @"jack";
NSLog(@"我是%@",str);
@:
- 将C字符串转换为OC字符串:"jack"-->@"jack"
- OC中的绝大部分关键字都是以@符号开头
用命令行编译链接一个程序:
cd /Users/bytedance/Desktop/hig/hig/code
touch main.m //创建.m文件
cc -c main.m //编译 此命令执行完生成main.o文件
cc mian.o //链接
如果程序中使用到了框架中的函数或者类,必须告诉编译器去哪个框架中找这个函数或者类:
cc main.o -framework Foundation 执行完会生成a.out文件
./a.out
源文件:xx.m 目标文件:xx.o 可执行文件:xx.out
面向过程:后期的维护和修改不方便 面向对象:后期的维护和修改十分方便
OC数据类型
支持C中的所有数据类型
- 基本数据类型:short,int,long,long long,float,double,char
- 构造类型:数组、结构体、枚举。
- 指针类型: int *p1
- 空类型:void
-
自定义类型typedef:
新增数据类型
-
BOOL:YES或NO(实际上就是1或0) 常用来存储条件表达式的结果 对比:bool :true/false
-
Boolean:true/false 用于存储条件表达式的结果 本质:unsigned char类型 Boolean b1 = false --> unsigned char b1 = 0
绝大多数情况下用BOOL。 -
Class 类
-
id指针 万能指针
-
nil
-
SEL 方法选择器
-
block 代码块
类与对象
类
类的声明:
-
位置:直接写在源文件中,不要写在main函数中
-
语法: @inteface 类名:NSObject{
属性,属性的名字必须要以下划线开头,e.g.,_name
}
方法的声明
@end
类的实现:
-
语法:
@implement
方法的实现
@end -
注意点
-
类名的每一个单词的首字母大写
-
创建对象:类名 *对象名 =[类名 new]
-
默认情况下对象的属性不允许外界直接访问,如果允许对象的属性直接被外界访问,要在声明属性的时候加上@public
-
访问对象属性的方式:
给属性赋值:对象名->属性名 = 值
调用对象属性:对象名->属性名
或者用(*对象名).属性名
-
方法
方法的声明:
-
位置:@interface大括号外边
-
语法:- (返回值类型)方法名称:(参数类型)行参名称;
-(void)eat:(NSString *)foodName;
多参数方法:- (返回值类型)方法名:(参数类型)行参名1 :(参数类型) 行参名2 :(参 数类型)行参名3;
-(int)sum: (int)num1 :(int)num2;
方法的实现:
-
位置:在@implementation之中实现
-
语法:将方法的声明中的分号去掉,换成大括号,将方法的实现写在大括号中
方法的调用:
-
先创建对象,通过对象调用方法。
-
语法:[对象名 方法名:实参1 :实参2 :实参3];
NULL与nil
NULL
只能作为指针变量的值,如果一个指针变量的值为NULL,表示该指针不指向内存中的任何空间
Nil
只能作为指针变量的值,如果一个指针变量的值为NULL,表示该指针不指向内存中的任何空间
NULL和nil其实是一样的
使用建议:
-
C指针用NULL
-
OC指针用nil:Person *p1 = nil;
如果Person类的指针为nil,代表这个指针不指向任何对象。 此时如果通过这个指针p1访问这个指针指向的对象的属性,会运行报错 如果通过这个指针p1访问这个指针指向的对象的方法,运行不会报错,但是方法不会执行,没有任何反应。