今年的秋季课程,我选修了IOS程序设计。虽然现在IOS编程都在主推用Swift语言,但是老师说起码这几年市面上90%+的APP还是用OC写的,因此上课的内容还是OC的相关知识。不过我们老师上课的速度有些快,OC的基础语法我还不怎么懂,于是去找了一些教程辅助学习,做了一些笔记,有空就上传到博客里和大家分享啦。不对的地方请大家指出哦~
定义类:
类的声明: (类名的每个单词的首字母大写)
@interface 类名: NSObject
{
属性 (属性名一定要以下划线开头,规范)
(不允许在声明属性的时候对其初始化)
}
方法的声明
@end
类的实现:
@implementation
方法的实现
@end
对象的创建:
类名 *对象名 = [ 类名 new ];
如何使用对象:
创建新对象 Person *p1 = [Person new];
(1)如何访问对象属性:
默认情况下,对象属性是不允许被外界直接访问的
属性声明前加上@public 可以被外界访问
(2)访问属性方式
p1 -> name 或者 (*p1).name
10月16日
方法的声明实现调用:
无参数的方法:
(1)声明:
a 位置 在@interface大括号之外
b 语法: - (返回值类型)方法名称;
-(void)run;
(2)实现:复制放在@implementation中,将分号去掉,加大括号
(3)调用:[对象名 方法名];
带1个参数的方法:
(1)声明:
a 位置
b 语法:-(返回值类型)方法名:(形参类型)形参名称;
-(void)eat : (NSString * )foodname ;
注意:这个方法的名字叫做 eat: (不要漏掉:)
(2)实现
(3)调用:[对象名 方法名:实参];
[ p1 eat:@"红烧排骨"];
带多个参数的方法:
(1)声明:
a 位置
b 语法:-(返回值类型)方法名:(形参类型)形参名称1 : (形参类型)形参名称2 ;
- (int ) sum : ( int )num1 :( int )num2;
注意:方法的名称是sum: : (注意是冒号+空格+冒号)
(2)实现
(3)调用:[对象名 方法名:实参1 :实参2 :实参3.....];
[ p1 sum:10 :20];
总结:方法头中的数据类型都要用小括号括起来。
带参数方法声明规范:
(1)如果方法只有一个参数,那么方法名最好叫做 xxxWith 或者 xxxWithxxx
-(void)eatWith : (NSString * )foodname ;
(2)如果方法有多个参数 ,建议写成
方法名With : (参数类型)参数名称 and:(参数类型)参数名称 and:(参数类型)参数名称;
- (int)sumWith : ( int )num1 and:( int )num2;
注意方法名字为:sumWith : and:
调用: [p1 sumWith :10 and :20];
OC中的方法和C语言中函数的不同:
① 语法不同
② 定义位置不一样
③ OC中方法调用需要创建对象才能调用哦
复习:1、OC在C的基础上
a 增加了面向对象的语法
b 将c语言复杂的语法封装的更加简单
2、a、 #import 指令 无论import多少次,最终都只是包含1次
b、 NSLog函数
①自动换行
②会输出一些其他的调试信息
c、 NSString
字符串常量前必须加一个@ 才是OC字符串
NSString 只能存储OC字符串 NSString *str = @"jack";
d、数据类型 BOOL id nil SEL block
10月17日
1、内存中的五大区域
栈 (存储局部变量)
堆 (手动申请的字节空间,使用 malloc calloc realloc函数)
BSS段(未被初始化的全局变量、静态变量)
数据段(常量区) 存放已经被初始化的全局变量 静态变量 常量数据
代码段 存储代码
2、类加载:在程序运行期间,当某个类 第一次 被访问到的时候,会将这个类存储到内存中的代码段区域,这个过程叫做类加载。直到程序运行结束的时候才会被释放。
10月18日
1、Person *p1 会在栈内存中申请1块空间,声明一个Person类型的指针变量p1
2、[Person new] 真正在内存中创建对象的其实是这句代码
new做的事情:
a 在堆内存中申请1块合适大小的空间
b 在这个空间内根据类的模板创建对象
这个类模板中定义了声明属性,就把这些属性依次放在对象中
除了类模板中定义的属性,还有一个isa指针,指向对象所属的类在的代码段中的地址
c 初始化对象的属性
基本数据类型 赋值为0
C语言指针类型 赋值为NULL
OC指针类型 赋值为nil
3、注意: 对象中只有属性,没有方法的。对象中包含了定义的数学和isa指针,isa指向一个类对象,这个类对象包含了Objective-C对象的一些信息,包括方法调度表,实现了什么协议等等。那为什么对象中只有属性没有方法呢?是因为每一个对象的方法实现都是一模一样的,没有必要为每个对象都保存一个方法。
10月20日
1、NULL和nil
a、只能作为指针变量的值,代表这个指针不指向内存中的任何1块空间;NULL其实是一个宏,就是0 。NULL和nil其实是一样的
b、建议 C指针用NULL,OC类指针用nil
c、类指针为nil时,访问该指针指向的对象属性,会报错;但调用该指针指向的对象的方法,运行不会报错。
2、分组导航标记
可以从No Selection里面跳转到所需的代码段处
(1)使用#pragma mark 分组名
(2)使用#pragma mark - (形成分割线)
(3)使用#pragma mark - 分组名