<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[gavin0123的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/gavin0123</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; gavin0123]]></copyright><item><title><![CDATA[处理imageView圆角]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/52460676</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/52460676</guid><author>gavin0123</author><pubDate>Wed, 07 Sep 2016 16:18:05 +0800</pubDate><description><![CDATA[@implementation
UIImage (Extension)

- (UIImage
*)circleImage
{
    
// NO代表透明
    
UIGraphicsBeginImageContextWithOptions(self.size,

NO,

0.0);
   
    
// 
获得上下文
    
CGContextRe]]></description><category></category></item><item><title><![CDATA[多个tableview 点击状态栏当前scrollView滚动到顶部]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/52460658</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/52460658</guid><author>gavin0123</author><pubDate>Wed, 07 Sep 2016 16:17:23 +0800</pubDate><description><![CDATA[1、在
AppDelegate 判断是不是点击了状态栏

2、判断当前view是否在主窗口，并且是显示状态


//是否显示  #import
"UIView+XMGExtension.h"
(BOOL)isShowingOnKeyWindow
{
    
// 
主窗口
    
UIWindow 
*keyWindow = [UIApplication

s]]></description><category></category></item><item><title><![CDATA[BOOL与bool的区别]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/50613882</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/50613882</guid><author>gavin0123</author><pubDate>Sun, 31 Jan 2016 07:25:20 +0800</pubDate><description><![CDATA[bool是c++上的，而BOOL时Obejctive－C的。
看源码定义：

/// Type to represent a boolean value.
#if (TARGET_OS_IPHONE && __LP64__)  ||  TARGET_OS_WATCH
#define OBJC_BOOL_IS_BOOL 1
typedef
bool
BOOL;
#else
#de]]></description><category></category></item><item><title><![CDATA[swift 溢出处理]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/50572948</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/50572948</guid><author>gavin0123</author><pubDate>Sun, 24 Jan 2016 16:36:14 +0800</pubDate><description><![CDATA[var potentialOverFlow = 
Int16.max

        potentialOverFlow = potentialOverFlow + 1
溢出处理器会报错，如果想对溢出处理，则需加“&”
溢出加法 &＋
溢出减法 &－

溢出乘法 &＊

溢出除法 &／

溢出求余 &％]]></description><category></category></item><item><title><![CDATA[字体造成卡顿]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/50534303</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/50534303</guid><author>gavin0123</author><pubDate>Sun, 17 Jan 2016 23:48:04 +0800</pubDate><description><![CDATA[在iOS7下选择iOS9的字体会造成卡顿的现象]]></description><category></category></item><item><title><![CDATA[loadView,viewDidLoad,viewDidUnload]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/50500607</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/50500607</guid><author>gavin0123</author><pubDate>Tue, 12 Jan 2016 00:12:45 +0800</pubDate><description><![CDATA[loadView,viewDidLoad,viewDidUnload，这三个函数到底应该怎么用？

谷歌一下，全是转载，大概内容是这样：

loadView 手动加载viewviewDidLoad用于nib文件加载后，进一步处理viewDidUnload是viewDidLoad的镜像

参考官方文档，我给出纠正：

一、loadView

永远不要主动调用这个函数。view c]]></description><category></category></item><item><title><![CDATA[UIImage优化]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/50492547</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/50492547</guid><author>gavin0123</author><pubDate>Sun, 10 Jan 2016 16:13:42 +0800</pubDate><description><![CDATA[imageNamed：使用系统缓存，适用于频繁使用的小图片
imageWithContentOfFile：不带缓存机制，适用于大图片，使用完就释放。]]></description><category></category></item><item><title><![CDATA[使用symbolicatecrash解析crash log日志]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/50488283</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/50488283</guid><author>gavin0123</author><pubDate>Sat, 09 Jan 2016 16:14:42 +0800</pubDate><description><![CDATA[普遍使用的方法是用symbolicatecrash来解析crash log：

导出crash log 通过Xcode的Organizer查看某台iphone设备的DeviceLog，选择需要的crash log，导出XXX.crash文件。

用symbolicatecrash来解析crash log：


1.首先找到​symbolicatecrash所在目录路径

xcod]]></description><category></category></item><item><title><![CDATA[iOS常用的第三方框架]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/50430229</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/50430229</guid><author>gavin0123</author><pubDate>Wed, 30 Dec 2015 00:11:43 +0800</pubDate><description><![CDATA[AFNetworking                    //网络
FMDB                                 //数据库操作
MBProgressHUD              //进度条
FLAnimatedImage           //适用于iOS的高性能动画GIF引擎
MWPhotoBrowser'          //一个可选的网格视]]></description><category></category></item><item><title><![CDATA[Effective Objective－C 2.0（下）]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/48938475</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/48938475</guid><author>gavin0123</author><pubDate>Tue, 06 Oct 2015 23:13:04 +0800</pubDate><description><![CDATA[第3章  接口与API设计

第15条：用前缀避免命名空间冲突

Objective－C没有其他语言那种内置的命名空间(namespace)机制。
Apple宣称其保留使用所有“两字母前缀”（two－letter prefix）的权利，所以在类的前缀应该是三个字母。
1.选择与你的公司、应用程序或二者皆有关联之名称作为类名的前缀，并在所有代码中均使用这一前缀。
2.若自己所开发的程序]]></description><category></category></item><item><title><![CDATA[Effective Objective－C 2.0（上）]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/48938401</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/48938401</guid><author>gavin0123</author><pubDate>Tue, 06 Oct 2015 23:07:50 +0800</pubDate><description><![CDATA[第1章 熟悉Objective－C

第1条：了解objective－c的起源

消息与函数调用之间的区别：

       实用函数调用的语言，则由编译器决定。如果调用的函数是多态的，那么在运行时就要按照“虚方法表”来查出到底应该执行哪个函数的实现。
       而使用消息结构的语言，其运行时所执行的代码由运行环境来决定。才用消息结构的语言，不论是否多态，总是在运行才会去查找所要]]></description><category></category></item><item><title><![CDATA[继承  有时候你可能需要重载代理方法]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/48904357</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/48904357</guid><author>gavin0123</author><pubDate>Mon, 05 Oct 2015 00:18:23 +0800</pubDate><description><![CDATA[有时候你可能需要重载代理方法。考虑有两个 UIViewController 子类的情况：UIViewControllerA 和 UIViewControllerB，有下面的类继承关系。
UIViewControllerB 
UIViewControllerA 遵从 UITableViewDelegate 并且实现了 -
 (CGFloat)tableView:(UITableView *)t]]></description><category></category></item><item><title><![CDATA[动态计算文本的高度]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/48903417</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/48903417</guid><author>gavin0123</author><pubDate>Mon, 05 Oct 2015 00:08:58 +0800</pubDate><description><![CDATA[一、-
 (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0); 
这是NSStr]]></description><category></category></item><item><title><![CDATA[nil,NIL,NULL]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/48903117</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/48903117</guid><author>gavin0123</author><pubDate>Mon, 05 Oct 2015 00:05:05 +0800</pubDate><description><![CDATA[1.nil 指给对象赋值（Objective-C中的任何对象都属于id类型）
id object = nil;  
// 判断对象不为空  
if (object) { 
}        



// 判断对象为空  
if (object == nil) {  
}  
2. NULL 给任何指针赋值,而NSNull则用于集合操作(集合类的元素)，虽然它们表示的都是空值.]]></description><category></category></item><item><title><![CDATA[本地化下按首字母分组排序的神器——UILocalizedIndexedCollation]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/47439855</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/47439855</guid><author>gavin0123</author><pubDate>Wed, 12 Aug 2015 10:00:19 +0800</pubDate><description><![CDATA[最近在整一个很简单的通讯录相关的项目，通讯录当然就少不了按首字母或者汉字拼音首字母分组排序索引。因为按照我一贯的的做法，都是想要做成更通用的、支持本地化的，所以这就纠结了，世界各地的语言啊我去，我顶多也就认识中文和英语，这就不能用以前的那些比如把汉字转成拼音再排序的方法了，效率不高不说，对其他国家的本地化更是行不通。一个偶然的机会，我才发现SDK里已经提供了一个实现此功能的神器——UILocali]]></description><category></category></item><item><title><![CDATA[TableViewCell中cell高度不一样时的优化]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/47403177</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/47403177</guid><author>gavin0123</author><pubDate>Mon, 10 Aug 2015 19:15:48 +0800</pubDate><description><![CDATA[TableViewCell中cell高度不一样时的优化：
    1.先创建有可能要显示的View（只初始化，不加载图片，如果后面不改变的在这初始化 不变的东西只初始化一次）；
    2.可以用一个数据模型记录Cell中所有子视图的位置，视图要显示的数据；
    3.调用数据模型给Cell中的view赋值，并设置frame]]></description><category></category></item><item><title><![CDATA[数据持久化-NSKeyedArchiver]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/47401109</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/47401109</guid><author>gavin0123</author><pubDate>Mon, 10 Aug 2015 17:11:20 +0800</pubDate><description><![CDATA[1.基本的数据类型如NSString、NSDictionary、NSArray、NSData、NSNumber等可以直接用NSKeyedArchiver归档和恢复。
2.不是所有的对象都可以直接用这种方法归档，只有遵守了NSCoding协议的对象才可以。
3.NSCoding的协议有2个方法

- (void)encodeWithCoder:(NSCoder *)encoder
每次归档]]></description><category></category></item><item><title><![CDATA[关于[[NSBundle mainBundle] pathForResource:@"name" ofType:@"type"]找不到指定文件的解决办法]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/46915137</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/46915137</guid><author>gavin0123</author><pubDate>Thu, 16 Jul 2015 17:35:27 +0800</pubDate><description><![CDATA[最近在使用[[NSBundle mainBundle] pathForResource:@"name" ofType:@"type"]时，找不到其对应的文件，文件当时是通过 右键->add files to 的方式添加到工程里面的，但是使用[[NSBundle mainBundle] pathForResource:@"name" ofType:@"type"]时，无论如何都找不到文件，经过了重启]]></description><category></category></item><item><title><![CDATA[iOS 图片三种加载方式的比较]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/46882497</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/46882497</guid><author>gavin0123</author><pubDate>Tue, 14 Jul 2015 19:39:19 +0800</pubDate><description><![CDATA[正确选择图片加载方式能够对内存优化起到很大的作用，常见的图片加载方式有下面三种：







[objc] view
 plaincopy






//方法1  
UIImage *imag1 = [UIImage imageNamed:@"image.png"];  
//方法2  
UIImage *image2 = [UIImage imageWi]]></description><category></category></item><item><title><![CDATA[ObjectiveC 深浅拷贝学习]]></title><link>https://blog.youkuaiyun.com/gavin0123/article/details/46874721</link><guid>https://blog.youkuaiyun.com/gavin0123/article/details/46874721</guid><author>gavin0123</author><pubDate>Tue, 14 Jul 2015 10:57:15 +0800</pubDate><description><![CDATA[转自 http://woshao.com/article/f91898b24a1211e097d3000c2959fd2a/




在ObjC中，什么是深浅拷贝？
深浅拷贝分别指深拷贝和浅拷贝，即mutableCopy和copy方法。
copy复制一个不可变对象，而mutableCopy复制一个mutable可变对象。

什么时候用到深浅拷贝？下面举几个例子说明。

非容器]]></description><category></category></item></channel></rss>