- 博客(19)
- 收藏
- 关注
原创 IOS 高级开发 KVC(一)
熟练使用KVC 可以再开发过程中可以给我们带来巨大的好处,尤其是在json 转模型的时候,KVC让程序员摆脱了繁琐无营养的代码堆积。减少代码量就是减少出错的概率。KVC 用起来很灵活,这种灵活的基础是严格的命名要求。这种命名要求其实是一种约定。再程序的世界里,约定的作用远远大于开发本身,良好的约定可以使程序员摆脱很多判断,也减少了错误。KVC有如下几点作用:1)、直接赋值使用KVC
2015-04-24 22:32:37 526
原创 堆排序的OC 实现
/* 建议先看堆调整方法,堆调整了解了,整个排序算法就算掌握了 */- (void)viewDidLoad{ [super viewDidLoad]; /* 测试数据 */ NSArray *array=@[@3,@2,@6,@4,@1,@0,@6,@7,@5]; NSMutableAr
2015-04-23 21:24:05 661
原创 iOS 高级开发 runtime(三)
三 、动态添加方法 我们可以通过runtime动态地添加方法。那么到底啥叫动态添加方法呢?动态添加方法就是当我们程序运行时才知道我们应该调用哪个方法。我们首先需要了解这一点,当我们编写完一段代码后,我们点击run 的时候,编译器会先进行预编译、编译、链接、运行这几个步骤。C语言是再编译的时候就已经确定了函数的调用顺序,而OC在编译的时候,只是确定了哪个对象,发送什么消息,具体这个消
2015-04-13 20:46:00 428
原创 IOS 高级开发 runtime(二)
二、移魂大法使用runtime还可以交换两个函数。先贴上代码和执行结果。#import @interface DZLPerson : NSObject@property(nonatomic,weak)NSString *name;@property(nonatomic,assign)NSInteger age;-(void)test_inPerson;@end#im
2015-04-10 22:27:11 374
原创 IOS高级开发 runtime(一) (皮拉夫大王深夜原创)
一、 简介IOS 开发中灵活使用runtime 会提高我们的程序性能和开发速度。要想使用runtime,首先要引入系统的头文件。#import 当我接触一样新的知识的时候,我比较喜欢先查看一下头文件,看看头文件里给我们提供了哪些接口。由于篇幅限制,我就偷个懒不往这里粘贴代码了。当我们查看runtime.h的时候,我们会发现,其实runtime是很有条理的。头文件主要给我们提供了4个类型(当然
2015-04-09 23:12:53 516
原创 AutoLayout的一些注意事项
要了解autolayout 首先要知道程序视图启动顺序:-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; NSLog(@"1");}-(void)updateViewConstraints{ [super updateViewConstraints]; NSLo
2015-03-27 21:14:58 403
原创 数组取平均压缩
后台蓝牙采集到的数据量很大,比如有1389条数据,但是在界面上只能显示30个数据点,多了的话这回影响界面美观。那么这样我们后台向前台提供数据时需要将数据压缩成30个点。1389/30=46.3。如果简单将每46个数据取平均或者没47个取平均都会影响精度。所以基本想法是将0.3作为修正因子,每隔46加0.3。直到修正因子达到1 或者1以上时,就将47个数据取平均,再将小数部分作为修正因子。由于只需要
2015-03-19 21:46:14 673
原创 将Cell中的视图取出传递到根视图
当我们点击Cell中的某个图片时,图片会有一种从Cell中取出,放大,然后再回到原来的Cell中的效果。我的想法是:当Cell中的图片用button 来显示。当我们点击Cell中的这个button的时候,button触发方法以代理的方式将button的图片和这个Cell 传递到视图控制器。视图控制器通过坐标转换,得出图片在屏幕的位置坐标,然后保存这个位置并根据这个Frame在主视图创建一个Imag
2015-03-18 19:41:16 349
原创 Cell的重用机制
static NSString *resuseId=@"cell"; UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:resuseId]; if (!cell) { cell=[[UITableViewCell alloc] initWithStyle:UITableVie
2015-03-14 09:01:56 442
原创 transfrom属性
transfrom可以实现一些形变。常见的有平移、缩放和旋转三种。使用起来很简单://横纵放大1.3倍 self.imageButton.transform=CGAffineTransformScale(self.imageButton.transform, 1.3, 1.3);//逆时针旋转180度 (加上y0.000001是因为旋转180°会默认顺时针)
2015-03-07 23:09:45 1072
原创 initialize 和init
initialize 是类方法,创建实例时会调用该方法。但是只会调用一次。如一个类创建了10个对象,initialize方法只会调用一次,但是init会调用10次。init 是实例方法,每次创建一个实例都会调用。调用在initialize之后。如果当前类没有实现initialize 方法,则系统会调用其父类的initialize 方法。已经有点晚了,就不贴代码介绍了。
2015-03-05 23:33:31 480
原创 分类添加属性
#import "ClassA.h"@interface ClassA (test)@property(cpoy,nonatomic)NSString *str;-(void)test1;@end分类不可以直接添加属性,但是如果你直接添加属性则会报错。如上,如果为ClassA 添加属性,再编译时不会报错,但是再运行阶段就会找不到实例变量str。2015-03-02 08:
2015-03-02 08:30:39 462
原创 KVC 和 OC字典
KVC(键值编码)和OC 字典很相似,都是键值存储。但是OC 字典比较灵活,它是一种映射。 [dict setObject: forKey:)#>]int main(int argc, const char * argv[]){ @autoreleasepool { NSMutableDictionary *dict=[[NSMutableDictionary a
2015-01-30 10:51:10 419
原创 CoreAnimation实现一个折线表
将折现表封装到一个view里,暴露给使用者的只有一个传入数据的方法。//// ChartLine.h// BoxingChampion//功能:根据传入的数组,绘制折线图 注意 其frame的宽 不能小于20,高不能小于50// Created by on 14-12-29.// Copyright (c) 2014年 . All rights reserved.//#i
2015-01-24 08:16:31 326
原创 copy和mutableCopy的深、浅拷贝
对象拷贝主要由两种方式:copy和mutableCopy。浅拷贝是指直接将指针指向原有的地址,从而达到复制的目的。深拷贝是指重新生成一个对象,将原有对象的内容复制到新的对象中。copy 返回的是一个不可变的对象,mutableCpoy返回的是一个可变的对象,但是由于OC的弱语法特性,即使如下使用编译器也不会报错。但是再运行时,arrayCopy会找不到具体的方法,报错。NSMutableArr
2015-01-23 12:35:30 345
原创 GCD的一点理解
大家都知道GCD 有两种队列:一种是串行队列,一种是并发队列。什么是串行队列?打个比方,如果队列是一些首尾相连的火柴。那么串行队列里,这些火柴只有在前一根火柴燃烧殆尽之后自己才会燃烧。而并行队列则不是这样,并行队列也是一队火柴,但是这些火柴在工作时会被一根一根自前向后地点燃,不用等待前一根火柴燃尽。那么什么是dispatch_async和dispatch_sync呢。我将dispatch_asyn
2015-01-07 16:48:27 357
原创 Objective c 自动释放池
学IOS 的大家都知道,IOS 一共有三种内存管理方式:MRC 、ARC、自动释放池。我按照我个人的理解简述一下自动释放池,希望能给大家一点帮助,如有错误请大家及时批评指正。自动释放池有几个特点:1、延缓释放、集中释放,也就是说自动释放池不是说立即释放,而是在自动释放池结束时检查那些空间需要实现自减,自减结束后再集中释放。2、加标记(autorelease)才实现计数器自减。3、对于一个runlo
2015-01-07 16:28:05 290
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人