iOS 基础知识整理

OC
1. 条件编译,例如:#ifdef ...#endif,程序编译前执行
2. #import和#include
#import提供判定导入文件是否重复,“ ”导入自定义源文件,<>导入系统源文件
3.object提供4种控制符:private,package,protected,public
4.自动释放池:延迟释放内存,放入自动释放池的对象,引用计数不会发生变化,当自动释放池release后,会对池中所有的对象发送一条release消息,即引用计数减一,不一定会销毁对象。
5.字符串的引用计数为-1
6. block数据类型,匿名函数代码块,可以保存一段代码,可传递,用于事件通信。block赋值的时候需要用copy修饰。

1)没有返回值,没有参数
void(^b)()=^{
NSLog(@“hello”);
};
b();

2)没有返回值,有参数
void(^fun)(int,int)=^(int a, int b){
NSLog(@“”);
};
fun(10,20);

3)有返回值,没有参数
NSString *(^fun1)()=^{
return @“hello”;
}
NSString *result = fun1();


4)有返回值,有参数
int (^fun2)(int,int)=^(int a, int b){
return a*b;
};
int result = fun2(20,30);

//以下这三种不带参数的block格式是等价的,通常使用最下面的那种。后面的void代表返回值。
void(^block)()=^void(){
};

void(^block)()=^(){
};

void(^block)()=^{
};

//先定义一个block对象,再赋值。
void(^block)();
block = ^{
};

简化定义block
//1. 计算两个数和的block
int(^sum)(int,int) ;
sum= ^(int a, int b) {
    return a+b;
};
int result = sum(100,200);

int(^dec)(int,int) ;
dec= ^(int a, int b) {
    return a-b;
};
int result = dec(300,200);

使用typedef将函数换一个名字
typedef int(^MyBlock)(int, int);
MyBlock block = ^(int a, int b) {
    return a-b;
};

7.KVC:键值编码,通过KVC可以在类的外部给私有的属性赋值。
设置基本数据类型的属性时,需要包装为对象(KVC在设值时,KVC内部会自动拆箱)
设值
[p setValue:@20 forKey:@“age”];

取值
NSNumber *num = [p valueForKey:@“age”];
NSInteger age = [num IntegerValue];

通过KVC设值时,如果有set方法,则会调用set方法。
拼接,key的值,首字母大写,并添加set,即key为@“name”,则赋值是调用setName()这个方法。同理,取值时,存在get方法,也会调用get方法。

1)KVC不通过set方法就可以给属性赋值
2)破坏了类的封装性
3)如果通过KVC给基本数据类型赋值,需要包装成对象。
4)KVC设值/取值时,如果有get方法,会优先调用set/get方法
5)KVC设值时,对象会被retain。

路径与一对多的关系
//设值
[p setValue:@“黑色” forKeyPath:@“car.color”];
//取值
NSString *color = [p valueForKeyPath:@“car.color”];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值