
IOS
lf644206005
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
奇葩的UITableView
最近写一个复用的下拉菜单,其中用到了UITableView,奇怪的是,当我使用下拉菜单的时候,UITableView最顶上的cell上面,还会出现一段空白(这个并不是headView),最后经过万能的谷歌发现,这是ios7的特性,iOS7在Conttoller中新增了这个属性:automaticallyAdjustsScrollViewInsets,当设置为YES时(默认YES),如果视图里面存在唯原创 2016-04-11 01:08:40 · 387 阅读 · 0 评论 -
iOS runloop 那些事儿
RunLoop是事件接收和分发机制的一个实现,提供了一种异步执行代码的机制,不能并行执行任务。在主队列中,Main RunLoop直接配合任务的执行,负责处理UI事件、定时器以及其他内核相关事件。RunLoop目的:保证程序执行的线程不会被系统终止。RunLoop使用场景:当需要和该线程进行交互的时候才会使用到。主线程默认有Runloop。当自己启动一个线程,如果只是用于处理单一的事件,则该原创 2015-10-24 00:40:24 · 389 阅读 · 0 评论 -
类方法和实例方法 那些事儿
Objective-C中的方法有两种:类方法(class method)和实例方法(instance method)。类方法被限定在类范围内,不能被类的实例调用(即脱离实例运行)。alloc就是一种类方法。实例方法限定在对象实例的范围内(即实例化之前不能运行)。init就是一种实例方法,被alloc方法返回的对象实例调用。NSObject *object = [[NSObject alloc] in原创 2015-10-22 22:39:06 · 2282 阅读 · 0 评论 -
UIViewController中的loadView
每次访问UIViewController的view(如controller.view/ self.view)如果view为nil,那么将会调用loadView(前提是view的UIViewController不为空)作用负责创建UIViewController的view,也就是我们可以用来自定义VC的View如果我们没有重载这个方法。他就会调用[super loadView]①、它会先去查找与U原创 2015-09-08 11:15:10 · 456 阅读 · 0 评论 -
Category添加属性
前言在一般情况下,我们是不能向Category中添加属性的,只能添加方法,但有些情况向,我们确实需要向Category中添加属性实例#import <Foundation/Foundation.h>#import <objc/runtime.h>@interface NSObject (CategoryWithProperty)/** * 要在Category中扩展的属性 */@prope原创 2015-09-08 10:33:06 · 470 阅读 · 0 评论 -
CABasicAnimation animationWithKeyPath
小编在编写iOS动画的时候,发现CABasicAnimation animationWithKeyPath中的路径竟然可以随便改,但是总觉得不对劲,就小小百度和实践了一下,发现后面的string是不能随便填写的,必须按照官方的那些string来编写。 例如:transform.rotation.y是根据y轴来旋转;transform.rotation.x则是根据x轴来旋转。原创 2015-08-01 10:19:58 · 404 阅读 · 0 评论 -
Objective-C动态类型(isKindOfClass,isMemberOfClass)
-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例原创 2015-07-29 09:41:20 · 425 阅读 · 0 评论 -
自定义UIBarButtonItem
自定义UIBarButtonItem我们经常使用UIBarButtonItem的时候,都会发现本机的不能满足我们的要求。 直接上代码:UIBarButtonItem *cancleBT = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action原创 2015-07-27 20:33:47 · 347 阅读 · 0 评论 -
IOS---网络错误
在使用iOS中的URL加载系统时,虽然手机与服务器之间的连接可能会出现各种各样的问题,不过大致可以分为三种错误类别:①OS错误;②HTTP错误;③应用错误OS错误①没有网络—如果设备没有数据网络连接,那么连接尝试很快就会被拒绝或者失败。这些错误可以通过Apple提供的Reachability框架检测; ②无法路由到目标主机—设备可能有网络连接,不过目标可能位于隔离的网络中或是离线状态; ③没有应原创 2015-05-04 20:11:14 · 962 阅读 · 0 评论 -
IOS ---网络异步请求
异步请求使用与同步和队列式异步请求相同的对象,只不过又增加了另一个对象,即NSURLConnectionDelegate: 上代码:#import "ViewController.h"NSInteger totalDownLoaded = 0;@interface ViewController ()@end@implementation ViewController- (void)viewDidL原创 2015-04-30 15:49:48 · 663 阅读 · 1 评论 -
atomic && nonatomic那些事儿
atomic: 设置成员变量的@property属性时,默认为atomic,提供多线程安全。 加了atomic,setter函数会变成下面这样: {lock} if (property != newValue) {原创 2015-10-26 00:14:21 · 269 阅读 · 0 评论 -
GCD---那些事儿
GCD 全程为 Grand Central Dispatch 是Apple开发多线程的一种解决方法。dispatch queue 分为以下三种: ① 运行在主线程的 Main queue,通过dispatch_get_main_queue来获取; ② 并行队列 global dispatch queue,通过dispatch_get_global_queue来获取,,由系统创建三个不同优先原创 2015-10-26 14:48:03 · 379 阅读 · 0 评论 -
iOS 类别 ---不能添加属性
category只能扩展类的方法,不能扩展类的属性。如果要扩展类的属性,可以用associative,这个相对于category来说用的比较少,而且他还用到运行时编程,必须使用@interface UIView (Loading)@property (nonatomic, strong) MBProgressHUD *hub;@end@implementation UIView (Loading)s原创 2016-03-11 20:51:59 · 890 阅读 · 0 评论 -
View Controller的生命周期
1、initWithNibName 、 init init中应该只有相关数据的初始化,而且这些数据都是比较关键的数据,不能出现创建view的代码,也不能够调用self.view,否则会导致viewController创建view。 如果是外部通过调用initWithNibName:bundle指定nib文件名的话,ViewController记载此nib来创建Vi原创 2016-01-06 14:44:44 · 463 阅读 · 0 评论 -
UIWindow
UIWindow ,是iOS程序启动完毕后,创建的第一个视图控件,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了。 (补充:创建的第一个对象是UIApplication)—获取UIWindow (1)[UIApplication sharedApplication].windows 在本应用中打开的UIWindow列表,这样就可以原创 2016-01-06 11:16:43 · 358 阅读 · 0 评论 -
iOS---NSArray和NSSet的区别
NSArray和NSSet所实现的基本功能其实都差不多,这和其他语言如java有很大差别,NSArray的存储数据的方式是连续的,后一个数据在内存中是紧接着前一个数据的,而NSSet在存储的时候并不是需要一块连续的内存,有可能我第一个数据在这个地方,而第二个数据和第一个数据中间还隔得有其他内容,我只是在存储第二个数据的时候,随便找了个可以放下的位置就存下来了那么他们这么做的好处是什么呢?NSSet由原创 2016-01-20 16:17:07 · 526 阅读 · 0 评论 -
NSString什么时候用copy,什么时候用strong
大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢?比如:@property (retain,nonatomic) NSString *rStr;@property (copy, nonatomic) NSString *cStr;- (void)test:{ NSMutableString *mStr = [NSMutableStrin转载 2016-01-20 18:27:16 · 574 阅读 · 0 评论 -
iOS @property
@property会自动合成存取方法,若不想令编译器自动合成存取方法,则可自己实现。①自己写getter和setter,但如果只写了一个,另一个,还是由编译器来自动合成; ②使用@dynamic,它会告诉编译器:不要自动创建实现属性所用的实例变量,也不要为其创建存取方法。而且,在编译代码的时候,编译器也不会报错,因为,它觉得在运行期能找到这些方法。原创 2016-01-20 18:01:40 · 353 阅读 · 0 评论 -
iOS initWithCoder, initWithFrame那些事儿
initWithFrame? initWithFrame是用来根据指定的CGRect,初始化并返回一个新的是视图对象的方法什么时候调用initWithFrame? ①当我们使用xib文件的时候,initWithFrame方法是不会被调用的。因为xib已经知道了如何初始化该View!这时候,将会调用initWithCoder方法 ②使用编程来编写View,将会调用initWithFra原创 2015-11-01 11:07:46 · 598 阅读 · 0 评论 -
iOS性能优化那些事
初级篇: 1. 用ARC管理内存 2. 在正确的地方使用reuseIdentifier 3. 尽可能使Views不透明 4. 避免庞大的XIB 5. 不要block主线程 6. 在Image Views中调整图片大小 7. 选择正确的Collection 8. 打开gzip压缩在第4点中,我们需要注意到,当你加载一个XIB的时候,所有的内容都会被放在内存里,包括图片(声音文件–OS原创 2015-10-29 00:17:06 · 449 阅读 · 0 评论 -
iOS 缓存机制 (以SDWebImage 缓存图片为例)
在iOS开发过程中,经常要用到缓存机制,那么如何较为好的设计一个缓存机制呢?在这里,小编以SDWebImage为例,说一下这个缓存机制:UIImageView+WebCache: setImageWithURL:placeholderImage:options: 先显示 placeholderImage ,同时由SDWebImageManager 根据 URL 来在本地查找图片。SDWebIm原创 2015-10-26 14:54:27 · 1286 阅读 · 0 评论 -
IOS --- NSFetchResultsController
NSFetchedResultsController和UITableView集成起来处理数据具有强大的灵活性。首先得到的好处是不需要将数据记录进行分页,不然,按照传统的做法,需要先查询出总的记录,然后再从纪录里面过滤,这样会进行两次操作,对内存消耗很大,处理不好,程序甚至可能崩溃。使用NSFetchedResultsController类不仅简单,还具有更高的性能,这个类自动帮助你记录分页的事情,得原创 2015-05-03 00:24:49 · 642 阅读 · 0 评论 -
IOS --- 单例模式
dispatch_oncedispatch_once函数是保证在应用程序执行中只执行一次指定处理的API。下面这种经常出现的用来进行初始化的源代码可通过dispatch_once函数简化:static int initialized = NO;if (initalized == NO){ /* *初始化 */ initialized = YES;}如果使用disp原创 2015-04-30 01:56:20 · 894 阅读 · 2 评论 -
IOS POST参数 需要处理特殊字符
在IOS NSURLConnection使用过程中,不知道大家有木有遇到过一个问题,就是当你post参数时,如果参数中还有特殊字符,参数就面目全非了,“C++”就变为“C”了,在度娘和资料的帮助下,发现只要将这些特殊字符在转之前处理一下,就可以正常POST了。代码如下://3 set params NSString *_page = CFBridgingRelease(CFURLCr原创 2015-04-04 01:33:45 · 3006 阅读 · 0 评论 -
int和NSInteger的区别
苹果官方的API文档中,对于NSInteger的描述: When building 32-bit applications, NSInteger is a 32-bit integer. A 64-bit application treats NSInteger as a 64-bit integer.也就是说:在32位App中,NSInteger是32位整型,在64位App中,NSIntege原创 2015-03-25 15:33:37 · 919 阅读 · 0 评论 -
ios atomic nonatomic区别
atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。 atomic 设置成员变量的@property属性时,默认为atomic,提供多线程安全。 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。 禁止多线程,变量保护,提高性能。 atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另转载 2015-04-01 00:42:57 · 376 阅读 · 0 评论 -
IOS Plist文件的读写
IOS Plist文件的读写首先,我们需要新建一个plist文件,在New File中创建Property List文件,然后直接用代码来读写,如下://获取plist路径NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"userSetting" ofType:@"plist"];NSMutableDictionary *t原创 2015-03-16 14:25:08 · 471 阅读 · 0 评论 -
判断IOS APP是否第一次启动
**判断IOS APP是否第一次启动**if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]){[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstLaunch"];NSLog(@"第一次启动此APP");}else{NSLog(原创 2015-03-16 17:20:42 · 539 阅读 · 0 评论 -
IOS基础:retain,copy,assign及autorelease
一,retain, copy, assign区别假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此时a 和b指向同一块内存,请问当a不再需要这块内存,能否直接释放它?答案是否定的,因为a并不知道b是否还在使用这块内存,如果a释放了,那么b在使用这块内存的时候会引起程序crash掉。了解到1中assign的问转载 2015-03-31 22:50:52 · 405 阅读 · 0 评论 -
IOS 沙盒
Documents这个目录用于存放程序中的数据,除了那些基于NSUserDefaults的设置数据。获取目录代码:NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsDirectory = [paths objectAt转载 2015-03-28 01:05:15 · 447 阅读 · 0 评论 -
KVO/KVC的理解
KVC(Key-Value Coding)KVC,既是指NSKeyValueCoding,是一种用来间接访问对象的属性的机制。 例如:一个对象拥有某些属性,你可以实例化这个对象,然后根据这个属性的字符串进行寻找。从最基础的层次上看,KVC 有两个方法:一个是设置 key 的值,另一个是获取 key 的值。KVO(Key-Value Observing)KVO是建立在KVC之上的,他能够观察一个对象原创 2015-03-20 20:18:05 · 403 阅读 · 0 评论 -
IOS 隐藏键盘
方法一: 直接点击键盘的return隐藏,方法如下:-(BOOL)textFieldShouldReturn:(UITextField *)textField{ [textField resignFirstResponder]; return YES;}方法二: 使用view的touchesBegan:触摸事件来实现对键盘的隐藏,当点击view的区域就会触发这个事件-(void原创 2015-03-17 01:10:18 · 430 阅读 · 0 评论 -
IOS之AutoLayout
个人感觉,现阶段IOS开发必备技能—–AutoLayout。苹果公司也一直在推荐这个布局方法。现在我们来简单了解一下。直接上代码: UIView *backgroundView = [[UIView alloc] init]; [backgroundView setTranslatesAutoresizingMaskIntoConstraints:NO]; background原创 2015-04-23 00:50:18 · 478 阅读 · 0 评论 -
修改IOS app名字
我们一开始初建app,我们模拟器和真机上显示的都是我们的项目名称,但是后来我们想改app名称,似乎看网上大多数教程都太复杂了。现在小笔提供一个只是修改app显示名称的方法: 直接在Info.plist中添加或者修改Bundle display name即可原创 2015-04-19 11:19:58 · 767 阅读 · 0 评论 -
IOS ---两种网络请求的最佳实践
在使用URL 加载系统时,主要的两种方法可以执行HTTP请求和接收响应:一、同步请求的最佳实践只在后台线程中使用同步请求,除非确定请求访问的是本地文件资源,否则请不要再主线程上使用;只有在知道返回的数据不会超出应用的内存时才使用同步请求。记住,整个响应体都会在位于代码的内存中。如果响应很大,那么可能导致应用出现内存溢出问题。此外,当代吗将响应解析为所需的格式时可能需要复制返回的数据,这会导致内存翻译 2015-04-27 01:22:59 · 634 阅读 · 0 评论 -
IOS 使用AVFoundation 扫描条形码、二维码等
在IOS7之前,我们一般都是通过ZXing或者ZBar来进行二维码、条形码的扫描识别。但在IOS7之后,我们可以直接调用AVFoundation来进行码的扫描识别,一下是代码(当然要导入AVFoundation.framework)- (void)setupCamera{ // Device self.device = [AVCaptureDevice defaultDeviceW原创 2015-04-05 17:49:29 · 3092 阅读 · 0 评论 -
IOS UITableView 局部刷新
//局部section刷新 NSIndexSet * nd=[[NSIndexSet alloc]initWithIndex:1];//刷新第二个section [tview reloadSections:nd withRowAnimation:UITableViewRowAnimationAutomatic]; //局部cell刷新 NSIndexPath *te=原创 2015-04-22 00:23:59 · 573 阅读 · 0 评论 -
IOS数据存储之---Core Data
前言个人理解core data是数据持久化存储的最佳方式;存储的数据类型可以是:SQLite数据库、XML、二进制、内存、或自定义的数据类型;能够合理管理内存,高效构成(1)NSManagedObjectContext(被管理的数据上下文)操作实际内容(操作持久层)作用:插入数据,查询数据,删除数据(2)NSManagedObjectModel(被管理的数据模型)数据库所有表格或数据结原创 2015-04-22 00:24:20 · 477 阅读 · 0 评论 -
iOS开发- TableView不显示没内容的Cell
直接加入这局代码就可以了。tv.tableFooterView = [[UIView alloc] init];原创 2015-04-17 15:04:39 · 654 阅读 · 0 评论 -
IOS---Blcok(截获的自动变量)
先上两段代码://1int val = 0;void (^blk)(void) = ^{val = 1};//2id array = [[NSMutableArray alloc] init];void (^blk)(void) = ^{ id obj = [[NSObject alloc] init]; [array addobject:obj];};稍微用过block的原创 2015-04-24 11:25:29 · 827 阅读 · 0 评论