[if !supportLists]1. [endif]委托机制(delegate)
[if !supportLists]2. [endif]数据源(datasource)
[if !supportLists]3. [endif]目标动作机制(target-action)
(1) 代码区:存放源代码的二进制数据
(2)数据区: 全局变量、常量、静态static变量
(3)栈区 : 函数的局部变量、块中的局部变量、函数的形参;
特点:由系统自动开辟内存空间 ,自动销毁,不需要程序员人为控制
int a = 100;
a = 200;
int *p = &a;
*p = 300; 最后结果a = 300;
(4)堆区 : 动态申请的内存,程序员手动申请,手动释放,如果不释放,会造成内存泄漏;
如果释放的内存再次使用,会发生Crash
C:malloc、free
int *p = (int *)malloc(sizeof(int) * 1);
C++、Java:new — delete
OC:alloc — dealloc
十进制:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
八进制:1 2 3 4 5 6 7 10 11 12 13 14 15 20 21 22 23 30 31 40
十六进制: 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14
项目一笔记
✓ ~~使用继承来实现代码的复用
✓ 相同文件: 定义方法实现复用
◦ 不同文件:(1)使用pch做全局符号 (2)使用继承方式实现方法的复用 (3)给共有的父类添加类别
解决的办法
0. 把局部变量变成全局变量
0. 把局部变量做成静态局部变量
0.
1.在一般的局部变量前面加static关键字,就变成了静态局部变量
2.一般局部变量在调用函数时,开辟内存空间并执行初始化,函数调用完毕后,立即销毁内存;再次调用函数,重新开辟新的内训控件,重新执行初始化,上次调用函数时局部变量数值不会保留
3.静态局部变量在第一次调用函数时,开辟北村并执行初始化,函数调用完毕内存不销毁。再次调用函数,不会开辟新的内存空间,不会执行初始化的操作,而且保留上次调用函数时该静态局部变量的值。 __block ·······
块函数的分类
1.分为栈区函数块 和 堆区函数块
2.栈区函数块 相当于一个局部变量,在某个函数或方法中将块定以后,该块会在函数或方法结束时销毁!
3.堆区函数块 生成后,在某个函数或方法中将块定以后,该块不会在函数或方法结束时销毁!
(1) 代码区:存放源代码的二进制数据
(2)数据区: 全局变量、常量、静态static变量
(3)栈区 : 函数的局部变量、块中的局部变量、函数的形参;
特点:由系统自动开辟内存空间 ,自动销毁,不需要程序员人为控制
int a = 100;
a = 200;
int *p = &a;
*p = 300; 最后结果a = 300;
(4)堆区 : 动态申请的内存,程序员手动申请,手动释放,如果不释放,会造成内存泄漏;
如果释放的内存再次使用,会发生Crash
C:malloc、free
int *p = (int *)malloc(sizeof(int) * 1);
C++、Java:new — delete
OC:alloc — dealloc
项目一笔记
设备 屏幕分辨率 开发点
iPhone1-iPhone4(3.5寸) 320px*480px 320pt*480pt 1pt = 1px icon.png
iPhone4S (3.5) 640px*980px 320pt*480pt 1pt = 1px [email protected]
iPhone5S/5 (3.5) 640px*1130px 320pt*480pt 1pt = 1px [email protected]
✓ ~~使用继承来实现代码的复用
✓ 相同文件: 定义方法实现复用
◦ 不同文件:(1)使用pch做全局符号 (2)使用继承方式实现方法的复用 (3)给共有的父类添加类别
解决的办法
0. 把局部变量变成全局变量
0. 把局部变量做成静态局部变量
0.
1.在一般的局部变量前面加static关键字,就变成了静态局部变量
2.一般局部变量在调用函数时,开辟内存空间并执行初始化,函数调用完毕后,立即销毁内存;再次调用函数,重新开辟新的内训控件,重新执行初始化,上次调用函数时局部变量数值不会保留
3.静态局部变量在第一次调用函数时,开辟北村并执行初始化,函数调用完毕内存不销毁。再次调用函数,不会开辟新的内存空间,不会执行初始化的操作,而且保留上次调用函数时该静态局部变量的值。 __block ·······
1.分为栈区函数块 和 堆区函数块
2.栈区函数块 相当于一个局部变量,在某个函数或方法中将块定以后,该块会在函数或方法结束时销毁!
3.堆区函数块 生成后,在某个函数或方法中将块定以后,该块不会在函数或方法结束时销毁!
整型
1G = 1024MB
1MB = 1024KB
1KB = 1024B (字节)
1B = 8bit (位)
sizeof()函数用来获取数据类型在当前环境下占用内存的大小,单位是字节
整型 占用大小 数值范围
short int/short 2字节 -2^15 ~ 2^15-1 (-32768~32767)
Int 4字节 -2^31 ~ 2^31 (约等于21亿)
Long int/long 8字节 -2^63 ~ 2^63 (约等于)
Unsigned short (无符号【正数或0】短整型) 0 ~ 2^16-1 (0~65535)
Unsigned int (无符号整型) 0 ~ 2^32-1
Unsigned long (无符号长整型)
Short 11111111111111111
在计算机内存中,存储整数以补码方式存储
正数补码 = 原码
负数补码 = 原码 - 反码 - 补码
short 18
Short -18
10010
18 原码 : 0000 0000 0001 0010
18 补码 : 0000 0000 0001 0010
-18 原码 : 1000 0000 0001 0010
-18 反码 : 1111 1111 1110 1101
-18 补码 : 1111 1111 1110 1110
浮点型:
设备 尺寸 屏幕分辨率 开发点
iPhone1-iPhone4 3.5寸 320px*480px 320pt*480pt 1pt = 1px icon.png
iPhone4S 3.5寸 640px*980px 320pt*480pt 1pt = 2px [email protected]
iPhone5S/5 /5c 4寸 640px*1136px 320pt*568pt 1pt = 2px [email protected]
iPhone6\6s\7\8 4.7寸 750px*1334px 375pt*667pt
iPhone6p\6sp\7p\8p 5.5寸 1242px*2208px 414pt*736pt 1pt = 3px [email protected]
iPhoneX 5.8寸 1125px*2436px 375pt*812pt
(1)self 表示所在累的对象
(2)在实例方法内部,可以使用 self 调用 其他的实例方法,但不可以调用类方法
(3)在类方法定义中,可以使用 self 调用其他的类方法,但不可以调用实例方法
(4)super 表示从父类中去执行某个方法,调用还是super所在的类中 (注意 ! 不要将 super 说成是父类的对象)
(5)常见的面试题
假设Student继承于Person类,在Student类中执行代码
NSLog(@"%@",NSStringFromClass([self Class]));
NSLog(@"%@",NSStringFromClass([super Class]));
结果都打印Student;
(1)init是开辟对象内存时调用的方法,表示将对象内存中的内容做初始化
(2)ViewDidLoad 是view从 nib 文件加载完毕执行的回调方法
(3)loadView 是当控制器中的 view 为 nil 的时候调用的回调方法
(4)执行顺序 init - loadView - viewDidLoad
(1)代理回传数据实现
A. 将接受回传数据的类做成代理类
B. 将发送数据的类做成委托类
C. 委托类中声明协议,在协议中声明方法;定义 weak 修饰的 id 类型的名称为 delegate 的属性;在相应的方法中让 self . delegate 调用协议中的方法
D. 代理类中,设置代理关系,采用协议,定义协议中的方法
(2)通知中心回传数据实现
A. 在接收回传数据的类中注册监听并设置接收到监听之后所触发的事件
B. 在发送数据的类中做通知的发出,如果须要传递数据,就将数据做成通知的参数,如果不需要回传数据,就不需要
1、const 与 const 指针的使用
(1)如果const修饰一个变量,变量变为常量,不能再赋值
const int num = 100;
(2)const 指针
<1>const int* p;
<2>int const* p;
<3>int* const p;
<4>const int* const p;
<1><2>不同写法,效果相同,const都在*号之前,p 可以指向不同内存,但是不可以通过p 间接改变内存中的数值;<3>p不可以指向其他指向内存,但可以通过p间接改变指向内存中的数值,定义和初始化必须写在一起;<4>综合了以上的所有特点;
1、const 与 const 指针的使用
(1)如果const修饰一个变量,变量变为常量,不能再赋值
const int num = 100;
(2)const 指针
<1>const int* p;
<2>int const* p;
<3>int* const p;
<4>const int* const p;
<1><2>不同写法,效果相同,const都在*号之前,p 可以指向不同内存,但是不可以通过p 间接改变内存中的数值;<3>p不可以指向其他指向内存,但可以通过p间接改变指向内存中的数值,定义和初始化必须写在一起;<4>综合了以上的所有特点;
1、自动做类型推断
2、可以保证类型使用安全
——Swift增加了Tuple表示元组类型
——Swift增加了Optional表示可选类型
——可以用任何你喜欢的字符作为常量和变量名,包含Unicode 字符
——常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符
——不能以数字开头,但是可以在常量与变量名的其他地方包含数字
/*
\n —— 换行
\t —— 水平制表符 (4个空格)
\\—— 表示1个\
\"—— 表示1个"
\'——表示1个'
*/
3.5e2 == 3.5乘以10的二次方
3.5e-3 == 3.5乘以10的-3次方
charname[10] ="China";
char address[10] = {'C','h','i','n','a','\0','B','e','i','\0'};
NSLog(@"%ld",strlen(name));//里面字符串的长度
NSLog(@"%ld",sizeof(address));
//包含\0的长度(自己定义字符串长度后会使用调用后的长度)
charsex[] ="nan";
NSLog(@"%c",sex[2]);
在Swift中要想越界
num = num &+ 1(溢出运算)
var str1 = "China"
var str2 = str1 + "Beijing"
str1 += "Beijing"