************************C语言部分************************
1.1. 运算符
赋值运算 =
自增自减运算 ++ --
逻辑运算 && || !
三目运算 A?B:C;
1.2. 结构
顺序结构 从上到下
选择结构
if if-else if-else-if switch
循环结构
while do-while for
1.3. 函数
定义 调用 声明
四种类型
有参数就给,有返回值就接
1.4. 数组
基本语法: 声明,初始化,使用,遍历
值传递:基本数据类型作为函数的参数,在函数内部不能修改实参变量的值!
地址传递: 数组作为函数参数,在函数内部可以修改数组元素的值
会丢失数组的长度,如果需要用数组长度要额外传递!
一维数组作为函数的参数: void test(int arr[],int len);
二维数组作为函数的参数: void test(int rows, int cols, int arr[][cols]);
排序算法
选择排序 len -1(外层) j = i+1 j < len 比较 i j
冒泡排序 len -1(外层) j = 0 j<len-1-i 比较 j j+1
1.5. 指针
指针的基本使用
1. 指针变量的声明.
int *p;
2. 指针变量的初始化.
p = &m;
3. 指针的使用.
*p;//取值(拿到p1指向的变量)
*p = 20;//赋值(给p1指向的变量赋值)
1.6 字符串
1,字符串的两种存储方式.
char name[] = "jack";(可变)
char *name = "jack";(不可变)
2,字符串的输入
char ch[20];
scanf("%s",ch);
3,字符串的输出
printf("%s",ch);
4,字符串的遍历
for (int i = 0; i < strlen(ch); i++) {
NSLog(@"%c",ch[i]);
}
1.7. 结构体
1,结构体基本使用
1). 作用:保存不同类型的数据
2). 使用结构体来创建1个新的数据类型.
struct Student
{
int age;
char* name;
};
3). 声明结构体类型的变量.
struct Student stu;
4). 初始化(赋值)
stu.name = "jack";
stu.age = 20;
5). 取值
stu.name;
stu.age;
2,结构体数组
struct Student s1;
struct Student s2;
struct Student arr[2] = {s1,s2};
3,结构体指针
struct Student s1;
struct Student *ps = &s1;
ps->name;
4,结构体嵌套
1.7. 枚举
1).什么时候用
当变量有几个限定的取值范围的时候
2).语法
enum Sex
{
SexMan,
SexWoman,
SexYao
};
3).声明变量. enum Sex s;
4).初始化 s = SexMan;
************************OC基础部分************************
2.1. 基础语法
面向对象编程思想
类和对象创建及基本使用
方法的基本使用
2.2. 对象方法和类方法
对象方法只能通过对象调用
类方法只能通过类名调用
2.3 self和super
谁调用当前方法,self就代表谁
self代表当前类,super代表父类
"一句话总结
调用自己的方法,建议使用self
调用父类的方法,建议使用super
2.4 封装
setter 和 getter 方法
2.5 继承
@interface 类名 : 它爹的名字(父类的类名)
@end
@implementation 类名
@end
2.6 多态
概念:父类指针指向子类对象 HMPerson *p = [HMStudent new];
实现多态的3个前提条件
1,继承关系
2,方法的重写
3,父类的指针指向子类对象
2.7 重写构造方法(固定格式)
- (instancetype)init
{
if(self = [super init])//1,先初始化父类
{
初始化子类属性 //2,再初始化子类
}
return self; //3,返回self
}
2.8 自定义构造方法 和 快速创建对象的类方法
//自定义构造方法
- (instancetype)initWithName:(NSString *)name andAge:(int)age andHeight:(float)height
{
if(self = [super init])
{
self.name = name;
self.age = age;
self.height = height;
}
return self;
}
//快速创建对象的类方法
+ (instancetype)personWithName:(NSString *)name andAge:(int)age
{
return [[self alloc] initWithName:name andAge:age];
}
************************OC加强部分************************
3.1 MRC
1,内存管理的原则
谁创建,谁release
谁retain,谁release
只要还有人在使用某个对象,那么这个对象就不会被回收;
只要你想使用这个对象,应该让对象的引用计数器+1;
当你不想使用这个对象时,应该让对象的引用计数器-1;
2,set方法内存管理
1)基本数据类型:直接赋值
2)OC对象类型:先判断是不是新传进来的对象, 对旧对象做一次release,对新对象做一次retain
- (void)setCar:(HMCar *)car
{
if(_car != car) //如果传入的car对象和本来的car对象不是同1个对象.
{
[_car release];//代表旧车不再使用 少1个人
_car = [car retain];//新车retain 代表新车多我1个使用.
}
}
3.2 ARC
ARC的判断准则: 只要没有强指针指向对象,对象就会被立即释放
strong : 用于OC对象(现在只要是对象都用strong)
assign : 用于基本数据类型(int,float,double,数组,结构体,枚举)
3.3 分类
分类的作用:在不改变原有类的基础上为类扩充方法
分类的声明和实现.
@interface HMStudent (分类名)
@end
@implementation HMStudent (分类名)
@end
非正式协议 :为系统自带的类写分类.就叫做非正式协议.
3.3 block
block变量的声明,初始化和调用(必须掌握)
//无参无返回值
void (^test1)(); //定义了一个block的变量
test1 = ^(){
NSLog(@"我是block");
};
//有参无返回值
void (^test2)(int a,int b) = ^(int a,int b){
NSLog(@"a+b = %d",a+b);
};
//有参有返回值
int (^test3)(int a,int b) = ^(int a,int b){
return a + b;
};
//无参有返回值
int (^test4)() = ^(){
return 10;
};
调用:有参数就给,有返回值就接
3.3 协议和代理
协议: 一些方法的声明,写在.h文件中,供其他的类去遵守.
使用协议的流程:
//--> 定义协议
// --> 让类遵守这个协议
// --> 实现协议中对应的方法
代理设计模式
学生通过中介找房子 经理让程序员检查代理
A帮B做事,A就是B的代理!!!,搞清楚,经理让程序员检查代码,老板雇佣员工干活
|
|