- 博客(56)
- 收藏
- 关注
原创 生产者和消费者
生产者public class Cooker implements Runnable{ private String name; private Disk disk; private String foods[]; private final Random random=new Random(); public String getName() { return name;
2014-05-03 11:17:27 870
原创 归档和偏好设置
由于直接写入plist文件的局限性,不能够存储自定义对象,所以就有了归档,NSString、NSDictionary、NSArray、NSData、NSNumber等类型的对象,可以直接用NSKeyedArchiver进行归档和恢复,因为它们内部实现了NSCoding协议,比如NSString实现了NSSecureCoding,而NSSecureCoding实现了NSCoding协议,不是所有的对
2014-03-05 20:58:07 1568
原创 plist文件
ios开发中经常会用到plist文件,其实就是xml文件,只是扩展名为.plist,NSArray或NSDictionary对象可以使用writeToFile:atomically:方法直接写入到Plist文件,可以将Plist文件内容直接加载至NSArray或NSDictionary,而无需XML解析!保存plist文件 NSArray *document=NSSearchPathFor
2014-03-03 21:41:55 1829
原创 IOS的沙盒机制
iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被称为沙盒,所有的非代码文件都要保存在此,例如图像、图标、声音、映像、属性列表、文本文件等1.每个应用程序都有自己的存储空间2.应用程序不能翻过自己的围墙去访问别的存储空间中的内容3.应用程序请求的数据都要通过权限检测,假如不符合条件,不会被放行IOS沙盒结构应用程序包:(Bundl
2014-03-03 20:46:08 1286
原创 ios多控制器切换
iOS中控制器切换分为:modal(模态窗口遮挡)、push(uinavigationcontroller)、uitabbarcontroller和自定义控制器切换。modal代码方式,耦合度较高,控制器相互依赖,所以使用modal的时候用storyboard。一.通过代码方式@protocol LoginControllerViewControllerDelegate;@
2014-02-23 21:17:26 2416
原创 kvc和kvo
oc为操作对象属性提供了两种方法来间接操作属性,kvc就是利用键值对来改写对象的属性值,类似字典,而kvo则提供了监控对象的某个属性值发生改变。kvc and kvoPerson *p=[[Person alloc]init]; PersonObserver *ob=[[PersonObserver alloc] init]; Bo
2014-02-23 11:42:19 1084
原创 ios程序运行过程以及常见文件
ios程序具有完整的生命周期,当用户点击图标的时候,会通过函数入口main开始程序,也就是项目中的main.m文件中的UIApplicationMain 方法,这个时候,会创建一个UiApplication的实例有且只有一个(单例),UiApplication象征着整个程序,然后会创建一个UiApplication的代理对象delegate,再开启一个消息循环监听系统事件,如果监听到某一个动作就会
2014-02-22 23:06:47 1149
原创 UITableView的基本使用三(自定义Cell)
在项目中,我们经常会使用UITableView,但是tableView中的cell格式又不一定每次都是一样的,所以我们需要自己实现我们自定义的cell,而自定义cell的方式也由很多,我们先采取用Xib的方式。1.通过xib创建一个cell,并且通过tag来获取cell上的其他子元素,这种方式会产生很多的tag,让tag都暴漏在控制器中,不方便管理,而且viewWithTag性能低下,每次
2014-02-16 16:34:23 6304
原创 UITableView的基本使用二(性能优化)
在使用UITableView的时候,会有很多的cell数据产生,如果数据量很大,而且用户在界面上操作频繁的时候,就会造成性能下降,那么这个时候我们要考虑使用缓存机制,也就是像Java中的缓存机制一样,用过Memcache或者使用过数据库连接池的同学肯定知道这个原理,如果缓存池中有就用缓存池中的,如果没有再创建。而在操作cell的时候,比如删除添加修改的时候,都要遵循MVC模式,通过修改数据来修改c
2014-02-15 17:35:24 3309
原创 微信开放平台API对接
研究了一下微信公众账号的开放平台的APi/** * * @Description: 微信消息处理以及用户分组 * @author zhangjun * @date 2014-1-7 上午10:51:51 */public class WeiXinMessageAction extends BaseAction{ /** * */ private static f
2014-02-13 19:18:41 3475
原创 口袋通api对接
由于公司最近要求和口袋通对接微商城,所以用到了口袋通的API,其实和微信开放平台的API很像,那么在上代码之前先说说口袋通吧,口袋通也是随着微信的浪潮诞生自白鸦之手,都是基于微信开放平台,对微信公众账号做二次开发,不过目前口袋通完全免费,和他们对接的过程中,有过一些沟通,反馈挺快的。/** * * @Description: 口袋通对接工具类 * @author zhangJun *
2014-02-13 17:13:12 4557
原创 UITableView的基本使用一
UITableView继承自UIScrollView,所以内容过多的分屏操作,也不用开发者操心了,开发中很多数据展示都用到这个空间,比如类似九宫格菜单和系统设置,通讯录等等。#pragma mark - 数据源方法 返回分组-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
2014-02-06 20:40:12 1872
原创 UIScrollView的分页和使用
UIScrollView同样是继承UIView,主要是对于其他组件内容一屏显示不完整,所以采用分屏显示。- (void)viewDidLoad{ [superviewDidLoad]; UIScrollView *scrol=[[UIScrollViewalloc]init]; //可视范围
2014-02-06 20:19:53 6816
原创 UIImage两种加载方式
UIImage是我们操作图片的一个类,而我们经常用UIImage imageNamed:@“图片名”获取一张图片,这种方法会找资源包中下的图片,加载一次后就一直在缓存中,性能比较好,而另外一种方法[[UIImage alloc] initWithContentsOfFile:@"全路径"]每次都会通过全路径获取图片。类型是否有缓存使用场合UIImage
2014-02-05 19:20:15 3897
转载 after modifying system headers, please delete the module cache
XCode5中出现如下报错信息:fatal error: file '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIVie
2014-02-05 18:47:11 1770
原创 时间处理控件UIDatePicker与UIPickerView
UIDatePicker依然继承自UIControl是经常用到的一个时间控件,方便我们用户输入日期.让控制器监听值发生改变#import @interface cooljuneViewController :UIViewController UIPickerViewDataSource,UIPickerViewDelegate>- (IBAction
2014-02-05 16:35:25 4734
转载 Xcode5.0下iOS6和IOS7切换使用
xcode5.0创建的项目默认是IOS7的,我们同时经常要看IOS6中显示效果,可以用以下方式Build 输入arm 然后选择 armv7,armv7s 完美解决Build 输入arm 然后选择 armv7,armv7s 完美解决
2014-02-05 14:10:21 1249
原创 UI控件的位置操作
在一个UI控制器中先有一个大的VIEW,我们可以通过[self.viewsubviews]获取控制器上所有的子组件,而组件的位置参照物都是父控件。我们常用到的修改组件的位置属性有frame、bounds、bounds、transform,值得注意的是,这些属性都是结构体,而苹果不允许我们直接修改属性结构体里面成员的值,一般都需要先取出来这个结构体,对这个结构体修改,再把结构体赋值给原来的属性,
2014-02-05 12:22:43 1693
原创 UI基础控件一
UIImageView、UILabel比较轻量级,因为大多数都做展示使用,并不需要什么特殊的操作,没有像UIButton类的组件继承UIControl,所以拥有的事件也比较少,而UISlider、UIStepper、UISwitch这些常用的操作性的控件都继承自UIControl,拥有丰富的事件。控制器头文件#import @interfac
2014-02-05 11:54:47 1340
原创 利用NSBundle加载资源文件
用NSBundle可以加载项目中的资源文件,比如plist文件或者xib等文件,只需要指定文件名和类型即可 .加载plist文件 //加载plist文件 NSBundle *bunle=[NSBundlemainBundle]; //根据文件类型和文件名加载plist文件 NSStrin
2014-02-05 11:41:27 3323
原创 UiButton操作
UIButton继承自UIView,虽然界面上的组件都继承自UIView,如果这个组件拥有丰富的事件那么肯定就要继承自UiView的一个子类UIControl,那么像UILable、UIImage这些轻量级组件都没有继承这个类,所以他们拥有的事件操作很少。初始化一个Button -(void) initWithRedBlock{ //初始化块
2014-02-04 14:59:20 1560
原创 UI组件缩放和旋转
旋转(注意:值是一个180°PI为单位)#pragma mark 改变组件角度旋转- (IBAction)rotationBlock:(UIButton *)sender { [UIViewbeginAnimations:nilcontext:nil]; [UIViewsetAnimationDuration:.8];
2014-02-04 14:50:21 1042
原创 IOS之UI添加动画
UIView提供了类方法beginAnimations开始一个动画,这种写法很像Java中jdbc中提交一个事务一样。 [UIViewbeginAnimations:nilcontext:nil]; //设置动画开始 [UIViewsetAnimationDuration:.8];//设置动画时间//动画操作
2014-02-04 14:46:36 919
原创 第一个UI界面
IOS提供的UI组件很像C#,很多控件都拖动再绑定事件就可以了,但是毕竟系统很死,生成的东西比较死板,所以我们也要经常自己手动写。在我们创建一个项目后,系统会自动生成一个视图控制器(ViewController),如果你想操作视图控制器上的组件,比如添加事件,那么就应该让视图控制器持有界面上的组件,而主面板(Main.storyboard),Main.storyboard也就是我们程序进入后的第一
2014-02-03 12:04:22 1519
原创 copy语法
OC提供了强大copy语法,让我们copy一个对象作为副本,改变副本对象而不影响原来的对象,而copy分为深拷贝也就是内容拷贝,用于可变类型的拷贝,拷贝之后会产生新的对象,计数器为1,还有就是浅拷贝也就是地址拷贝,用于不可变的对象拷贝,因为对象本身不可变,在copy的时候,源对象会被直接返回并不会创建新的对象,拷贝后计数器加1。只有不可变对象copy为不可变对象的时候才是浅拷贝。
2014-02-02 15:43:18 1625
原创 NSObject常用方法
NSObject相当于Java中的基类object。 Student *stu=[[[Studentalloc]init]autorelease]; //返回对象的所有信息 Class c=[stu class];//Class c=[Student class]; //判断对象是否属于某个类的实例
2014-02-02 13:38:56 928
原创 NSDate的使用
NSDate是OC中的时间类型,和Java中的Date一样,而对时间进行格式化处理的NSDateFormatter就像Java中simpledateformat,对时间进行格式化输出或者对一个字符串时间转换成时间格式。基本使用NSDate *date=[NSDatedate]; NSLog(@"date=%@",date);
2014-02-02 12:09:59 1343
原创 NSValue与数据类型
NSValue可以包装所有的数据类型,而前一篇博客写到的NSNumber也是继承自NSValue,在API中我们可以发现,实际上是用了分类进行了扩充,因为集合中需要的是OC对象,所以我们使用的基本数据类型和结构体都可以使用NSValue进行包装,再丢给集合。 CGPoint p=CGPointMake(20,10); //@encode(C
2014-02-02 11:38:01 1138
原创 集合使用NSArray、NSSet、NSDictionary的使用
NSArra继承自NSobject对象,为了解决存储不同类型的多个元素,其实更像是Java中的List,只能放OC对象,不能直接存放基本数据类型,也不能存放空值,不可变 ,arrayWithObjects这个方法初始化数组的时候里面的nil值不能删除,代表数组终止标记,不是数组元素。基本使用和循环void array(){ //只能放OC对象,不能
2014-02-01 19:23:36 2979
原创 NSMutableString的使用
NSMutableString是oc中的可变字符串和Java中的stringbuilder一样,如果你要经常修改一个字符串的内容,那么最好使用NSMutableString,这样性能更高void mutbaleString(){ NSMutableString *str=[NSMutableStringstringWithFormat:@"cooljune
2014-02-01 16:45:38 1359
原创 oc中的常用结构体
OC中的很多类型都是对一个或多个类型进行包装再组合成一个新的结构体,在用typedef起一个别名,然后就变成了新的类型,当然在开发中,我们自己也会定义很多的结构体。/**常用结构体**/void structTest(){ /******范围******/ // typedef struct _NSRange { //
2014-02-01 15:50:17 2278
原创 NSString使用
NSString继承自NSObject对象,在OC中作为字符串类型,就像Java中的string一样,值得注意的是:系统自带的对象都有一个和对象方法相同的类方法完成相同的功能,也就是说有一个静态方法和一个动态方法,而且静态方法不用我们管理内存,所以开发中都用静态方法。基本使用和文件读取void createString(){ NSString *s
2014-02-01 15:40:31 1273
原创 ARC兼容NoARC
在xcode5.0以后,我们创建的项目默认就是ARC项目,如果要改为NoARC,只需修改automatic reference counting 为NO就可以了,Xcode也为老的arc项目提供了便捷,一键转为arc项目。我们点中项目然后,点击edit-->Refactor(重构)-->convert to objectc arc,这种重构方式相当于xcode会取检测代码中的内存管理代码,然后
2014-02-01 09:54:08 1382
原创 ARC使用和注意点
ARC(Automatic reference counting)管理,是为了提高开发者的效率,节省编写内存管理的代码,让开发者更关心自己的业务,并没有真正的自动内存管理,而是编译器在编译前会检查代码,判断对象是否被强指向,如果有指针强指向这个对象,那么这个对象就不会被回收。区别强指针和弱指针分别用__strong和__weak,默认所有对象的指针都是强指针,而在我们对象模型构建的时候,如果一
2014-01-31 19:27:53 1447
原创 block和指针函数
block代码块和指针函数在定义上只有一个符号的细微差别,至于灵活性和使用场景,具体问题具体分析,block比较灵活。#import #import "Student.h"int sumAb(int a,int b){ return a+b;}void testBlock(){ //定义一个block类型
2014-01-31 16:20:45 929
原创 block代码块
block代码块看起来语法很怪异,简单来说它就是一个很灵活的代码块,在你想调用的时候在调用。#import @class Button;typedefvoid (^ButtonBlock) (Button *btn);@interface Button :NSObject@property (nonat
2014-01-29 17:33:33 834
原创 protocol协议
oc中的协议很像Java中的接口,定义一组约定俗成的规范,让其他类来实现,而protocol主要是为了监视这个对象的活动信息,这样看起来到像是数据库端的触发器了,一旦满足某个规则,我就执行某个事件。#import @class MessageCenter;//定义一个消息中心的协议@protocol MessageDelegate NSObjec
2014-01-29 16:40:55 1372
原创 OC与Category 分类
Category 分类,动态为已经存在的某个类动态添加方法,为以前的类扩展方法,但是不能添加成员变量,实现了类的相关方法的模块化,把不同的类的方法分配到不同的分类文件中,就像在Java开发中的struts或者spring配置文件模块化一样,便于分模块开发,并且可以扩展OC基础类库中的类。#import@interface Student :NSObject
2014-01-29 10:52:42 1303
原创 @autoreleasepool内存管理
虽然OC提供了@autoreleasepool这样方便快捷管理内存的方案,但它并不像Java一样能够全自动化,很多时候还是需要我们自己手动释放内存。自动释放池是OC里面的一种内存回收机制,一般可以将一些临时变量添加到自动释放池中,统一回收释放,当自动释放池销毁时,池里面的所有对象都会调用一次release,也就是计数器会减1,但是自动释放池被销毁了,里面的对象并不一定会被销毁。
2014-01-29 10:15:59 1782
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人