- 博客(20)
- 收藏
- 关注
原创 super关键字
@implementation Son : Father - (id)init { self = [super init]; if (self) { NSLog(@"%@", NSStringFromClass([self class])); NSLog(@"%@", NSStringFro
2017-07-26 22:09:28
326
原创 Runloop
学过操作系统的都知道,一个线程对应一个消息队列,iOS里消息队列被叫做Runloop,但是,runloop比消息队列做的事多得多。 正常情况下,线程执行完任务(消息队列里的任务)就会自动退出,就main函数而言,他顺序执行完代码后就会return,但一个应用在其没有任务时也不会退出,当有事件时他会立马去执行,就像随时待命一样。这就是runloop的作用。简而言之runloop就是让线程一直活着。
2017-07-26 21:50:20
357
原创 iOS应用生命周期
main.m int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } main函数的
2017-07-26 21:45:20
391
原创 可变参数
在看博客的时候看到了这个:NSArray * @[objects,...] 这是个带可变参数的方法。 有时我们实现一个方法时不能确定调用它时要传进来几个参数,多了少了都会产生错误,这时可变参数就能体现出他的优点,用三个点代替不确定的参数,调用时就可以传任意个数参数值。 我们先来说一下参数的存储,函数(方法)参数是以数据结构:栈的形式存取,从右至左入栈。 首先是参数的内存存放格式:参
2017-07-26 21:34:07
427
原创 HTTP
万维网(www):大规模的,联机式的信息储存所。超文本是万维网的基础。 万维网里存储了大量的文本(媒体)资源,超文本,通过一个链接得到一个文本。 http,超文本传输协议,是应用层协议,http规定了万维网客户程序和服务器程序之间传输文本、交互要遵守的协议 http特点: 1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、H
2017-07-26 21:06:03
852
原创 NSString的内存管理
NSString引用计数很特殊 大多数情况下string的retainCount都是无限大的数。这是因为,字符串创建出来不是在堆上的,而是在常量区。常量区只要值相同,就是同一块内存。常量区的值在APP结束时才会释放,指向这块内存的指针不受引用计数限制。 下面有三种情况: 情况一: NSString *Str1 = [NSStringstringWithFormat:@"a%d",11]
2017-05-04 11:17:50
417
原创 iOS 属性
属性是结构体对象,编译期,编译器自动合成属性的get,set方法,并向类结构体里添加 “_属性名” 实例变量。类对象用.语法访问属性时调用的是ge方法,_属性名访问时访问的是实例变量。 特性: 原子性:不同线程不能同时读写 读写权限 内存管理语义:(属性与类对象之间的协议) assign数字类型(如 CGFloat,NSInteg
2017-03-18 17:12:16
431
原创 iOS autorelease
autorelease是一个池子pool,声明auto的对象被放在这个pool里,用With创建的对象被创建出来时引用计数就是1,再有一个指针变量指向它,引用计数就是2,当返回这个变量所在的函数时,变量被释放,对象的引用计数-1,但还是1,我们知道,当引用计为0时,对象才会自动释放,aotoreleasepool的作用就是,当pool drain时,里面的对象引用计数-1,为0的释放。
2017-03-18 17:08:06
597
原创 __weak
1、weak修饰符变量持有的对象必须是注册到autoreleasepool里的对象,因为,weak变量对对象是弱引用,通过weak变量访问对象时,这个对象可能已经被释放了,注册到autoreleasepool里,@autoreleasepool结束之前能保证对象一直存在。 2、__weak 变量有一个特性就是它不会影响所指向对象的生命周期 3、__weak变量所指向的对象被释放时,__we
2017-03-18 17:06:57
1129
原创 xcode问题及解决
Xcode 项目中我们可以使用 ARC 和非 ARC 的混合模式。 如果你的项目使用的非 ARC 模式,则为 ARC 模式的代码文件加入 -fobjc-arc 标签。 如果你的项目使用的是 ARC 模式,则为非 ARC 模式的代码文件加入 -fno-objc-arc 标签。 添加标签的方法: 打开:你的target -> Build Phases -
2017-01-15 14:49:14
426
1
原创 alloc和allocWithZone
之前做项目的时候见过这样一个方法创建单例: static MyGizmoClass *sharedGizmoManager = nil; + (MyGizmoClass*)sharedManager { if (sharedGizmoManager == nil) { sharedGizmoManager = [[super allocWithZone:NUL
2017-01-15 14:47:42
554
原创 C++成员变量初始化顺序
1、成员变量在使用初始化列表初始化时,与构造函数中初始化成员列表的顺序无关,只与定义成员变量的顺序有关。因为成员变量的初始化次序是根据变量在内存中次序有关,而内存中的排列顺序早在编译期就根据变量的定义次序决定了。这点在EffectiveC++中有详细介绍。 2、如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。 3、注意:类成员在定义时,是不能初始化的
2017-01-15 14:47:05
2567
原创 简单了解Block
block一般作为回调函数,形式: int (^blk_t)(int)=^int (int count){return count+1;},对应的是^ 返回类型(参数列表){表达式}; 用typedef如下: typedef int (^blk)(int ); blk elk_t=^(int count){return count+1}; 一、截获变量 bloc
2017-01-15 14:46:18
370
原创 存储空间划分
C++的内存划分为栈区、堆区、全局区/静态区、字符串常量和代码区。 栈区:由系统进行内存的管理。 说明:主要存放函数的参数以及局部变量。栈区由系统进行内存管理,在函数完成执行,系统自行释放栈区内存,不需要用户管理。整个程序的栈区的大小可以在编译器中由用户自行设定,默认的栈区大小为3M。 全局/静态区:全局、静态数据存放在一起的,初始化的全局变量和静态变量是在一起的。
2017-01-15 14:45:29
1607
原创 初识GCD
进程:一个可执行的程序 任务:一块可执行的代码 线程:指的是一个独立的代码执行路径,线程是代码执行路径的最小分支 串行和并行:串行是一次只能执行一个任务,并行是一次能执行多个任务 并行是CPU的多核芯同时执行多个任务 并发是单核CPU交替执行两个任务 GCD中的dispatch queue是FIFO任务队列,一个任务可以是一个函数,也可以是一个block。
2017-01-15 14:43:44
289
原创 UITableViewCell重用
重用机制可以节省很多内存, - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CMainCell = @"CMainCell"; // 0
2017-01-15 14:40:32
362
原创 指针数组与数组指针
数组指针(指向数组的指针)是存放着地址的变量,属于二级指针,寻址方式是寄存器间接寻址,操作数(变量)存储在内存中,该内存地址(一级指针)存储在寄存器中,寄存器地址(二级指针)存储在地址码字段中,这种存储方式指令长度短,范围大,可是每次要访问两个设备,所以速度慢。 形式:数据类型 (*指针变量)[指向数组的长度]; 用数组指针遍历二维数组非常方便。 arr[3][4]={{1,2,3,4},{
2015-05-31 15:21:05
538
原创 oc函数
函数是一种非常好用的结构,它可以重复使用,简化代码,提高代码的效率, 1、函数调用在函数定义之后,可以直接定义函数;如果函数调用在函数定义之前,或调用的函数在另一个源文件中,就需要声明函数; 2、主函数调用函数是传递的是实参的副本,函数用形参接收实际上是对新生成的变量(形参)进行了初始化赋值,所以,形参的改变不影响实参; 3、递归函数:即调用该函数本身的函数; 递归函数就像一个循环一样,在
2015-05-30 12:07:36
1315
原创 oc变量类型
oc包含了一系列的变量类型,整形,字符型,浮点型,枚举型。变量在使用时必须先声明后使用,并且指定类型的变量只能接收类型与他匹配的值。需要注意的是,在声明时,标示符不能与oc中的关键字相同,不然会傻傻分不清楚。 标示符: 标示符由字母,数字,下划线和美元符号($)组成; 标示符不能是关键字,但可以包含关键字; 标示符不能包含除美元符($)以外的任何符号;(only dollar……
2015-05-30 11:55:53
1221
原创 oc学习心得
最近浅浅的学习了一下IOS,颇有感慨。使用手机这么多年有没有想过自己写一个APP?而且还是iPhoneAPP,听起来好高大上啊,不过这并不是天方夜谭,前提是好好敲代码!从一个programmingzero变成一个Appstore hero. 作为一个21世纪的优秀青年,看到apple满天飞怎能无动于衷呢?虽然Objective—C是苹果的专属编程语言,但近年阳光雨露过盛,apple泛
2015-05-28 22:54:07
720
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人