摘要: UIDatePicker1.常见属性/*样式UIDatePickerModeTime,时间UIDatePickerModeDate,日期UIDatePickerModeDateAndTime 日期 + 时间*/@property(nonatomic) UIDatePickerMode datePic... 阅读全文
posted @ 2014-04-17 14:48 TianXiang.Liu 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 一、UITextField1.常见属性@property(nonatomic,retain) UIView *leftView; // 设置文本框左边显示什么控件,可以让文本框的内容往右边挪动@property(nonatomic) UITextFieldViewMode leftViewMo... 阅读全文
posted @ 2014-04-17 14:45 TianXiang.Liu 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 一、URL1.什么是URL?URL是某个资源的唯一路径,通过这个路径就能访问对应的资源2.URL的组成协议头://全路径* 协议头就代表资源的类型,比如http代表网络服务器资源,ftp代表ftp文件服务器资源,file代表本地资源3.举例http://www.baidu.comhttp://www... 阅读全文
posted @ 2014-04-17 14:44 TianXiang.Liu 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 一、加载xib文件的两种方式1.方法一(NewsCell是xib文件的名称)NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"NewsCell" owner:nil options:nil];2.方法二UINib *nib = [UIN... 阅读全文
posted @ 2014-04-17 14:42 TianXiang.Liu 阅读(574) 评论(0) 推荐(0) 编辑
摘要: 一、UITableView的代理方法#pragma mark 每一行的高度- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath #pragma mark 选中了某一... 阅读全文
posted @ 2014-04-17 14:38 TianXiang.Liu 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 一、UITableView1.数据展示的条件1> UITableView的所有数据都是由数据源(dataSource)提供的,所以要想在UITableView展示数据,必须设置UITableView的dataSource数据源对象2> 要想当UITableView的dataSource对象,必须遵守... 阅读全文
posted @ 2014-04-17 14:32 TianXiang.Liu 阅读(460) 评论(0) 推荐(0) 编辑
摘要: 一、UIScrollView1.常见属性@property(nonatomic) CGPoint contentOffset; // 记录UIScrollView滚动的位置@property(nonatomic) CGSize contentSize; // 内容尺寸(能滚动的范围)@propert... 阅读全文
posted @ 2014-04-17 14:29 TianXiang.Liu 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 一、类扩展(class extension,匿名分类)1.格式@interface 类名 (){ // 成员变量...}// 方法声明...@end2.作用1> 写在.m文件中2> 一般用来扩充私有成员变量、@property属性、方法等二、随机数生成1.arc4random() 会生成任意正... 阅读全文
posted @ 2014-04-17 14:27 TianXiang.Liu 阅读(496) 评论(0) 推荐(0) 编辑
摘要: 一、UIButton和UIImageView的区别1.显示图片1> UIImageView只能显示一种图片(图片默认会填充整个UIImageView) image\setImage:2> UIButton能显示2种图片* 背景 (背景会填充整个UIButton) setBackroungImag... 阅读全文
posted @ 2014-04-17 14:25 TianXiang.Liu 阅读(675) 评论(0) 推荐(0) 编辑
摘要: IOS基本控件属性一、控件的属性1.CGRect frame1> 表示控件的位置和尺寸(以父控件的左上角为坐标原点(0, 0))2> 修改这个属性,可以调整控件的位置和尺寸2.CGPoint center1> 表示控件的中点(以父控件的左上角为坐标原点)2> 修改这个属性,可以调整控件的位置3.CG... 阅读全文
posted @ 2014-04-17 14:20 TianXiang.Liu 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 创建一个简单的tableView: 1 #import 2 3 /*tableView 一定要遵守这两个协议: UITableViewDataSource,UITableViewDelegate */ 4 5 @interface ViewController :UIViewControll... 阅读全文
posted @ 2014-04-16 18:07 TianXiang.Liu 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 为已有工程项目添加git 阅读全文
posted @ 2014-04-16 16:35 TianXiang.Liu 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 在Objective-C中采用Automatic Reference Counting(ARC)机制,让编译器来进行内存管理。在新一代Apple LLVM编辑器中设置ARC为有效状态,就无需再次键入retain或者release代码,这在降低程序崩溃、内存泄露等风险的同时,很大程度上减少了开发程序的工作量。编译器完全清楚目标对象,并能立刻释放那些不再被使用的对象。如此一来,应用程序将具有可预测性,且能流畅运行,速度也将大幅度提升。 阅读全文
posted @ 2014-03-28 22:26 TianXiang.Liu 阅读(309) 评论(0) 推荐(0) 编辑
摘要: OC动态绑定 Runtime 阅读全文
posted @ 2014-03-24 22:39 TianXiang.Liu 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码)。下图是如何把块变量赋值给一个变量的语法讲解:按照调用函数的方式调用块对象变量就可以了:1 int result = myBlock(4); // result是 282 1、参数是NSString*的代码块3 void (^printBlock)(NSString *x);4 printBlock = ^(NSString* str)5 {6 NS.. 阅读全文
posted @ 2014-03-09 21:20 TianXiang.Liu 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 单例是指静态分配的实例,就是只开辟一块内存,不会重新开辟内存,而 iphone sdk 中全是这种实例,例如[UIApplication sharedApplication] 返回一个指向代表应用程序的单例对象的指针。[UIDevice currentDevice] 获取一个代表所有使用硬件平台的对象。将类方法与单例相结合,便可以在程序的任何地方访问静态实例,而无需使用指向对象的指针或保存它的实例变量。单例模式是一个类在系统中只有一个实例对象。通过全局的一个入口点对这个实例对象进行访问。在iOS开发中,单例模式是非常有用的一种设计模式。如下图,是一个简单的例模式的UML类图。IOS中的单例模式 阅读全文
posted @ 2014-03-09 21:11 TianXiang.Liu 阅读(207) 评论(0) 推荐(0) 编辑
摘要: NSNotification、delegate和KVO 阅读全文
posted @ 2014-03-09 21:05 TianXiang.Liu 阅读(248) 评论(0) 推荐(0) 编辑
摘要: - (void)showStoryboard{ // 实例化MainStoryboard UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; // 在主线程上更新Storyboard dispatch_async(dispatch_get_main_queue(), ^{ self.window.rootViewController = storyboard.instantiateInitialViewController;... 阅读全文
posted @ 2014-03-05 10:02 TianXiang.Liu 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 如果把人生比作跑步的话,我们都在用自己的节奏和姿势在完成比赛。这些跑步的技巧可能是小时候从老师,朋友,家人那得来的。随着时间的流逝,我们习惯了这种跑步的技能,看见那些跑得快的,会羡慕;跑得慢的,会不屑;跑得别扭的,会当作笑料。但是自己跑得怎么样,却很少关心。为什么要跑这条道?为什么这么慢?为什么这么累?我们很难做到客观,尤其是面对自己的时候,那些缺点、曾经犯的错会自动进入盲区,躲避意识的雷达。尽管如此,我还是找到了数量可观的不足,才发现,原来这么些年,我一直在以这么别扭、丑陋的姿势在跑步。不够专注乔希·维茨金在《学习的艺术》里曾这么描述他当时的专注程度:『我太过于专注,以至于她觉得如 阅读全文
posted @ 2014-02-28 13:17 TianXiang.Liu 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 网上相关的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己的一些想法。目录结构AppDelegateModelsMacroGeneralHelpersVendorsSectionsResources一个合理的目录结构首先应该是清晰的,让人一眼看上去就能大概了解目录的职责,且容易应对新的变化。AppDelegate这个目录下放的是AppDelegate.h(.m)文件,是整个应用的入口文件,所以单独拿出来。Models这个目录下放一些与数据相关的Model文件,里面大概是这样:Models |- BaseModel.h |- Bas... 阅读全文
posted @ 2014-02-28 12:25 TianXiang.Liu 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 最近几年中涌现了大量的Objective-C开发者。有些是从动态语言转过来的,比如Ruby或Python,有些是从强类型语言转过来的,如Java或C#,当然也有直接以Objective-C作为入门语言的。也就是说有很大一部分开发者都没有使用Objective-C太长时间。当你接触一门新语言时,更多地会关注基础知识,如语法和特性等。但通常有一些更高级的,更鲜为人知又有强大功能的特性等待你去开拓。这篇文章主要是来领略下Objective-C的运行时(runtime),同时解释是什么让Objective-C如此动态,然后感受下这些动态化的技术细节。希望这回让你对Objective-C和Cocoa是如 阅读全文
posted @ 2014-02-28 12:11 TianXiang.Liu 阅读(249) 评论(0) 推荐(1) 编辑
摘要: #pragma mark 清空字符串中的空白字符- (NSString *)trimString{ return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];}#pragma mark 是否空字符串- (BOOL)isEmptyString{ return (self == nil || self.length == 0);}#pragma mark 返回沙盒中的文件路径- (NSString *)documentsPath{ NSString... 阅读全文
posted @ 2014-02-26 14:09 TianXiang.Liu 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 1.登陆openfire管理页面,在主页面下方选择编辑属性,修改服务器名称为当前主机名称,点击保存属性,按页面提示重启服务器。2.重启后,主页的服务器属性下的服务器名称出现一个叹号,鼠标放上去显示Found RSA certificate that is not valid for the server domain, 这样是由于RSA认证无效造成的,需要对新的服务器进行RSA证书的配置。3.选择【服务器设置】菜单,选择左下方的【服务器证书】,会看到两个证书,点击后面的删除按钮全部删除。删除后按系统提示重启服务器。4.重启后,回到【服务器证书】页面会看到 “一个或更多的证书丢失。单击这里产生自 阅读全文
posted @ 2014-02-24 17:01 TianXiang.Liu 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 1.重复调用2次loadView和viewDidLoad2.按钮无法点击3.@2x和-568h@2x4.启动app时全屏显示Default.png1.重复调用2次loadView和viewDidLoad最好不要在UIViewController的loadView方法中改变状态栏的可视性(比如状态栏由显示变为隐藏、或者由隐藏变为显示),因为会导致重复调用2次loadView和viewDidLoad方法假设状态栏本来是处于显示状态的:下面的是错误代码: 1 - (void)loadView { 2 NSLog(@"loadView"); 3 // 隐藏状态栏 4 [U... 阅读全文
posted @ 2014-02-22 23:01 TianXiang.Liu 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 服务器配置 阅读全文
posted @ 2014-02-21 23:07 TianXiang.Liu 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2014-02-19 18:45 TianXiang.Liu 阅读(149) 评论(0) 推荐(0) 编辑
摘要: // 返回一个可拉伸的图片 // UIImage的分类+ (UIImage *)resizedImage:(NSString *)name{ UIImage *image = [self imageWithName:name]; return [image stretchableImageWithLeftCapWidth:image.size.width * 0.5 topCapHeight:image.size.height * 0.5];} 阅读全文
posted @ 2014-01-15 11:34 TianXiang.Liu 阅读(147) 评论(0) 推荐(0) 编辑
摘要: init和initialize 阅读全文
posted @ 2014-01-15 11:30 TianXiang.Liu 阅读(1292) 评论(0) 推荐(2) 编辑
摘要: post请求 阅读全文
posted @ 2014-01-15 11:10 TianXiang.Liu 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 一、NSInvocationOperation二、NSBlockOperation三、NSOperation的其他用法四、自定义NSOperation1.上一讲简单介绍了NSThread的使用,虽然也可以实现多线程编程,但是需要我们去管理线程的生命周期,还要考虑线程同步、加锁问题,造成一些性能上的开销。我们也可以配合使用NSOperation和NSOperationQueue实现多线程编程,实现步骤大致是这样的:1> 先将需要执行的操作封装到一个NSOperation对象中2> 然后将NSOperation对象添加到NSOperationQueue中3> 系统会自动将NSOp 阅读全文
posted @ 2013-12-28 21:41 TianXiang.Liu 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 每个iOS应用程序都有个专门用来更新显示UI界面、处理用户触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验。一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行,多线程编程是防止主线程堵塞,增加运行效率的最佳方法。iOS中有3种常见的多线程编程方法:1.NSThread这种方法需要管理线程的生命周期、同步、加锁问题,会导致一定的性能开销2.NSOperation和NSOperationQueue是基于OC实现的。NSOperation以面向对象的方式封装了需要执行的操作,然后可以将这个操作放到一个NSOperat... 阅读全文
posted @ 2013-12-28 21:24 TianXiang.Liu 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 多线程技术 —— 通过并发提高程序的整体性能。进程 - 应用程序,负责开辟一块内存区域,供应用程序执行 每一个进程都默认有一个“主线程”线程 - 要执行的任务流 当有耗时操作时,可能需要在后台新建一个子线程,来单独处理这些耗时的操作,待操作完成之后,再更新UI界面。 如果不放在其他线程执行,会“阻塞”住主线程的执行,影响用户体验。注意:所有界面UI的更新操作,都必须在主线程上完成!提问:一般的应用程序最多能开多少条线程?回答:尽可能少得开线程,只有那些消耗时间,影响用于体验的操作,才会放到后台线程中执行,通常一个应用程序的子线程不应该超过20。无论使用哪种多线程技术都可以使用 [NSThrea 阅读全文
posted @ 2013-12-28 20:38 TianXiang.Liu 阅读(179) 评论(0) 推荐(0) 编辑