<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[jlstmac的开发笔记]]></title><description><![CDATA[用力的工作，用力的玩]]></description><link>https://blog.youkuaiyun.com/jlstmac3</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jlstmac3]]></copyright><item><title><![CDATA[UIViewController中addChildViewController的坑：viewWillAppear不调用]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/52414301</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/52414301</guid><author>jlstmac3</author><pubDate>Fri, 02 Sep 2016 15:31:06 +0800</pubDate><description><![CDATA[项目中有一个需求是，需要在一个父UIViewController中，加载一个子ViewController。我这里是用的方式是：


    [self addChildViewController:_baseVC];

    [self.view addSubview:_baseVC.view];
这里有个坑就是：子viewcontroller的viewWillAppear不会被调]]></description><category></category></item><item><title><![CDATA[UITableView性能优化之cell的高度缓存]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/52412728</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/52412728</guid><author>jlstmac3</author><pubDate>Fri, 02 Sep 2016 12:21:59 +0800</pubDate><description><![CDATA[复杂的feed流通常是cell的高度不固定的，比如微博，微信，它们的高度需要根据内容计算的。滑动的时候动态计算肯定会影响速度，所以最好的做法是，在获取到数据的时候，就能计算所有cell的高度然后缓存起来。在heightForRowAtIndexPath方法里，只是根据indexpath去取高度就行了。
但是，这就要求我们实现只是根据数据就能计算cell高度的接口。如果，你不想实现这个接口，或者实]]></description><category></category></item><item><title><![CDATA[UITableView性能优化之estimatedHeightForRowAtIndexPath]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/50675230</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/50675230</guid><author>jlstmac3</author><pubDate>Tue, 16 Feb 2016 16:01:31 +0800</pubDate><description><![CDATA[- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
这个方法是iOS7之后增加的，作用就是优化UITableView的性能，确切的说就是减少UITableView加载时的时间。
原理:
这个方法之所以能起到优化作用原因在于


-(]]></description><category></category></item><item><title><![CDATA[git命令学习笔记]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/50638450</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/50638450</guid><author>jlstmac3</author><pubDate>Fri, 05 Feb 2016 16:21:50 +0800</pubDate><description><![CDATA[来了新公司，不能用sourceTree了，只能用命令行了。之前习惯了可视化操作，对于命令只是略知一二，没办法从头开始学习咯！！！本人新手写错了，一定请大家留言指正！！
从常用的学起：
1.git diff和git status
提交代码前得先确认做了些什么改动吧。git status查看当前状态：




一目了然，然后查看做了什么改动：git diff,按enter查看下一行，按]]></description><category></category></item><item><title><![CDATA[UIView各种属性解析！]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/50633905</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/50633905</guid><author>jlstmac3</author><pubDate>Thu, 04 Feb 2016 15:33:26 +0800</pubDate><description><![CDATA[UIView作为iOS中界面元素的基类，几乎所有应用中的所有可见元素都是基于UIView的！学习iOS的UI，得从UIView学起！！！


1.关于位置和大小


@property(nonatomic)
CGRect            frame;

frame表示UIView的位置和大小，其中位置是以左上角为锚点的




@property(nonatomi]]></description><category></category></item><item><title><![CDATA[UIView的动画 Animation]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/50457793</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/50457793</guid><author>jlstmac3</author><pubDate>Mon, 04 Jan 2016 19:20:34 +0800</pubDate><description><![CDATA[我们可以运用UIView的动画（Animation）来实现一些UI的动画效果。这对于用户体验和引导用户使用有很好的作用。
基本的动画变化：
1.位移：通过改变view.center的值来实现
 
self.blueSquare.center.x
 = self.view.bounds.width
 - self.blueSquare.center.x
2.放大缩小：通过view.tr]]></description><category></category></item><item><title><![CDATA[Objective-c的kvo和kvc]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/50301957</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/50301957</guid><author>jlstmac3</author><pubDate>Mon, 14 Dec 2015 22:44:32 +0800</pubDate><description><![CDATA[kvc(key value coding),键值编码，提供一种间接访问属性的方法，而不通过setter和getter函数（破坏了封装）
kvo(key value observer),键值观察，观察者模式，在键值改变的时候观察者会得到通知。基于kvc的]]></description><category></category></item><item><title><![CDATA[objective-c的ARC机制，strong和weak]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/50109855</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/50109855</guid><author>jlstmac3</author><pubDate>Mon, 30 Nov 2015 11:38:14 +0800</pubDate><description><![CDATA[ARC是iOS5后引入的，这是编译器特性而不是OC的语言特性。
ARC的实质就是由编译器自动实现retain,release,dealloc。其实质还是引用计数，只是我们不需要显示的去调用引用计数相关函数而已。


在ARC后有四种所有权修饰符：
__strong,__weak,_unsafe_unretained,_autoreleasing。


__strong表示强引用，可]]></description><category></category></item><item><title><![CDATA[Objective-c利用runtime给对象添加一个变量：objc_setAssociatedObject（关联）]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/49993211</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/49993211</guid><author>jlstmac3</author><pubDate>Mon, 23 Nov 2015 12:14:42 +0800</pubDate><description><![CDATA[利用objc_setAssociatedObject可以在不改变类结果的情况，为类增加一块内存，存放一些变量。
方法很简单，只要为你增加的变量设置一个key就行了！同时需要设置变量的赋值方式比如说，retain活着assign，或者是否automitic
NSString* myStr = @"string";
    const char* key = "key";
    NSArray*]]></description><category></category></item><item><title><![CDATA[Objective-c的block(块)]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/49949897</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/49949897</guid><author>jlstmac3</author><pubDate>Fri, 20 Nov 2015 17:50:23 +0800</pubDate><description><![CDATA[block的定义语法类似C中的函数指针，在别的文章里看到一张图很形象：


与定义函数指针相比只是把＊换成了^而已。


个人理解，block其实就是一种函数形式，只是在OC中给赋予了一些别的意义。其实block也通常作为回调的。
block相对于OC中的方法，不同的是，它可以定义在方法体里。它被定义后可以做为参数，或者像变量一样赋值。也可以直接运行比如：
blockname();]]></description><category></category></item><item><title><![CDATA[Objective-c的copy和mutableCopy]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/49929337</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/49929337</guid><author>jlstmac3</author><pubDate>Thu, 19 Nov 2015 16:20:33 +0800</pubDate><description><![CDATA[NSObject实现了两个协议NSCopying和NSMutableCopying
@protocol NSCopying

- (id)copyWithZone:(NSZone *)zone;

@end

@protocol NSMutableCopying

- (id)mutableCopyWithZone:(NSZone *)zone;

@end

使用copy等到的都是不可变的]]></description><category></category></item><item><title><![CDATA[Objective-c的category(分类)和Extension(扩张)]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/49868349</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/49868349</guid><author>jlstmac3</author><pubDate>Wed, 18 Nov 2015 11:09:48 +0800</pubDate><description><![CDATA[1.Category（分类）可以为已有的类添加新的方法
在Objective-c中给已有的类添加新的方法，除了继承，还有一种更简单的方法，那就是Category（分类）。（分类只能添加方法，不能添加新的成员变量）
Category的定义：
@interface ClassName (CategoryName)
 
@end
比如我要给XYZPerson定义一个分类XYZPersonName]]></description><category></category></item><item><title><![CDATA[Objective-c的@property,属性介绍]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/49803333</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/49803333</guid><author>jlstmac3</author><pubDate>Sun, 15 Nov 2015 14:27:03 +0800</pubDate><description><![CDATA[使用@property可以定义变量的setter和getter方法，再通过@synthesize实现setter和getter方法
使用@proerty时可以选择属性，主要分为以下几类：
1.可读可写性：readonly | readwrite;
这个很容易理解，readonly只定义getter方法而不定义setter方法。
2.setter属性：assign | retain | co]]></description><category></category></item><item><title><![CDATA[Objective-c的instancetype和id]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/49614133</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/49614133</guid><author>jlstmac3</author><pubDate>Tue, 03 Nov 2015 13:57:23 +0800</pubDate><description><![CDATA[结论：在能用instancetype的时候应该尽量使用instancetype来替换id。
id是一个指向Objective-c中的class的实例对象的指针，通用类型。可以作为函数的返回类型，或者其他地方作为一种类型。


typedef struct objc_object {  Class isa;  } *id; 
而instancetype只能作为函数返回值。从名字上就能看出i]]></description><category></category></item><item><title><![CDATA[Objective-c的多态]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/49557163</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/49557163</guid><author>jlstmac3</author><pubDate>Sun, 01 Nov 2015 12:11:51 +0800</pubDate><description><![CDATA[Objective-c中不支持严格的重载（voerload）,但是支持对父类的重写！也就是说同一类中不能有相同方法名的方法，即使同名方法不同类型的参数也是不行的。
这一机制我猜测是跟OC中存储方法是以SEL格式存储，而SEL是通过@selector(func)生成的。SEL是根据方法名生成的，所以如果有两个同名的方法就会有歧义。仅仅是猜测，因为现在对OC的具体机制还不是特别清楚。


Ob]]></description><category></category></item><item><title><![CDATA[Objective-c的协议protocol]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/49556675</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/49556675</guid><author>jlstmac3</author><pubDate>Sun, 01 Nov 2015 11:06:56 +0800</pubDate><description><![CDATA[Objective-c是单一继承，好在它是支持协议protocol的，而且是支持多个协议！对比C++学习，其实就是C++中的虚基类，唯一的不同是虚积累中如果有纯虚函数，那么继承了虚基类的C++类必须去实现纯虚函数。而OC中的protocol不是必须实现的。]]></description><category></category></item><item><title><![CDATA[Objective-c的成员变量访问权限]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/49556517</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/49556517</guid><author>jlstmac3</author><pubDate>Sun, 01 Nov 2015 10:54:40 +0800</pubDate><description><![CDATA[Objective-c中有类似C++中的@private,@protected和@public的声明成员变量的访问权限的关键字！
功能和C++中的一样：
@private:只有的类中，可以访问。
@protected:只有本类和子类中可以访问。
@public:本类，子类，和类外都可以访问。


但是在Objective-c中，这些关键字只能用来修饰成员变量，而不能用来修饰方法。所以]]></description><category></category></item><item><title><![CDATA[cocos2d-x，CCArray源码学习]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/46862059</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/46862059</guid><author>jlstmac3</author><pubDate>Mon, 13 Jul 2015 14:39:37 +0800</pubDate><description><![CDATA[看了一下cocos2d-x中的CCArray源码！大多数代码可以很容易理解的，我对插入和删除的实现比较感兴趣，所以重点看了一下！


首先看看CCArray的主要数据结构：

typedef struct _ccArray {
unsigned int num, max;
CCObject** arr;
} ccArray;

一个指针数组，一个当前数量和一个最大数量。所以CC]]></description><category></category></item><item><title><![CDATA[C++学习--函数重载(overload)的简单总结]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/44134041</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/44134041</guid><author>jlstmac3</author><pubDate>Sun, 08 Mar 2015 16:52:04 +0800</pubDate><description><![CDATA[C++函数重载的条件总结：
1.只是返回值不同不能重载。
   2.如果函数中有默认参数时需要注意：
void fun(int a,int b = 2 );
void fun(int a);
          此时不能构成重载，调用fun(2);时，编译器找不到具体哪个函数。
      3.const和非const函数可以构成重载。如果调用函数的对象是const变量就调用const]]></description><category></category></item><item><title><![CDATA[C++学习--static函数，内联(inline)函数, 友元 (friend) 函数]]></title><link>https://blog.youkuaiyun.com/jlstmac3/article/details/41775335</link><guid>https://blog.youkuaiyun.com/jlstmac3/article/details/41775335</guid><author>jlstmac3</author><pubDate>Sat, 06 Dec 2014 15:10:27 +0800</pubDate><description><![CDATA[简单总结一下C++中的各种特殊函数


1.static成员函数
定义在类体中，定义时在前面加static关键字：
class Test{
static void getID();
}
static 函数属于类，但是不属于类的任何一个对象，不能访问类的成员。
一般的成员函数都有隐含的this指针，但是static成员函数没有。
因为static成员函数不是任何对象的组成部分，所]]></description><category></category></item></channel></rss>