<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[飞天鱼的专栏]]></title><description><![CDATA[子非鱼   焉知鱼之乐！！]]></description><link>https://blog.youkuaiyun.com/wangjiangang_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wangjiangang_]]></copyright><item><title><![CDATA[block和函数指针有什么区别]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46538527</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46538527</guid><author>wangjiangang_</author><pubDate>Wed, 17 Jun 2015 21:32:27 +0800</pubDate><description><![CDATA[block就是一个代码块，但是它的神奇之处在于在内联(inline)执行的时候(这和C++很像)还可以传递参数。同时block本身也可以被作为参数在方法和函数间传递，这就给予了block无限的可能。
       block和函数指针有什么区别？
          第一个区别，函数指针是对一个函数地址的引用，这个函数在编译的时候就已经确定了。而block是一个函数对象，是在程序运行过程中产生]]></description><category></category></item><item><title><![CDATA[libsqlite3.dylib与libsqlite3.0.dylib的区别]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46408147</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46408147</guid><author>wangjiangang_</author><pubDate>Mon, 08 Jun 2015 09:20:13 +0800</pubDate><description><![CDATA[在我们添加数据库框架时，在搜索框中输入sqlite关键字,下面列表区会显示libsqlite3.dylib，libsqlite3.0.dylib。
    此时我们选择libsqlite3.dylib。


那么libsqlite3.dylib与libsqlite3.0.dylib的区别是什么？
         刚开始一直以为是两个版本的， 直接引用libsqlite3.dylib不就]]></description><category></category></item><item><title><![CDATA[OC release之后 retainCount为何为1]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46352559</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46352559</guid><author>wangjiangang_</author><pubDate>Wed, 03 Jun 2015 22:35:01 +0800</pubDate><description><![CDATA[在XCode中加入如下代码：
 UILabel *label=[UILabel alloc];
[label setText:@"TestLabel"];
NSLog(@"%d",[label retainCount]);
[label release];
NSLog(@"%d",[label retainCount]);
理论上说，第一句话alloc了一个label，其保留计数器值为]]></description><category></category></item><item><title><![CDATA[ARC机制的基本规则及强制规定]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46351961</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46351961</guid><author>wangjiangang_</author><pubDate>Wed, 03 Jun 2015 21:49:40 +0800</pubDate><description><![CDATA[ARC机制基本规则：
delegate使用方法：@property (assign) xxxDelegate delegate;
delegate和outlet 应该用 weak 属性来声明

在ARC机制下，彻底忘掉retain、release、retainCount和autorelease。以前我们在需要安全使用一个对象时，往往会将该对象retain住，在不需要的时候进行release]]></description><category></category></item><item><title><![CDATA[C语言条件编译及编译预处理阶段]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46304271</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46304271</guid><author>wangjiangang_</author><pubDate>Mon, 01 Jun 2015 11:46:39 +0800</pubDate><description><![CDATA[一、C语言由源代码生成的各阶段如下：

C源程序－>编译预处理－>编译－>优化程序－>汇编程序－>链接程序－>可执行文件


       其中 编译预处理阶段，读取c源程序，对其中的伪指令（以#开头的指令）和特殊符号进行处理。或者说是扫描源代码，对其进行初步的转换，产生新的源代码提供给编译器。预处理过程先于编译器对源代码进行处理。

       在C 语言中，并没有任何内在的机制]]></description><category></category></item><item><title><![CDATA[Objective-C的内省(Introspection)机制]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46303051</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46303051</guid><author>wangjiangang_</author><pubDate>Mon, 01 Jun 2015 11:32:08 +0800</pubDate><description><![CDATA[内省（Introspection）是面向对象语言和环境的一个强大特性，Objective-C和Cocoa在这个方面尤其的丰富。内省是对象揭示自己作为一个运行时对象的详细信息的一种能力。这些详细信息包括对象在继承树上的位置，对象是否遵循特定的协议，以及是否可以响应特定的消息。NSObject协议和类定义了很多内省方法，用于查询运行时信息，以便根据对象的特征进行识别。


明智地使用内省可以使面]]></description><category></category></item><item><title><![CDATA[关于OC中消息转发机制的理解以及在项目中的实际应用]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46301907</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46301907</guid><author>wangjiangang_</author><pubDate>Mon, 01 Jun 2015 11:19:20 +0800</pubDate><description><![CDATA[一、什么是消息转发？

@selector 是什么？


1一种类型 SEL

2代表你要发送的消息(方法), 跟

字符串

有点像, 也可以互转.： NSSelectorFromString()  ／  NSSelectorFromString()



3可以理解为类似函数指针的东西--是能让Objective-C动态调用方法的玩意.--是 object-c 的]]></description><category></category></item><item><title><![CDATA[OC运行时编程指南]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46301619</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46301619</guid><author>wangjiangang_</author><pubDate>Mon, 01 Jun 2015 11:09:33 +0800</pubDate><description><![CDATA[目录[+]




OC运行时编程指南

介绍

OC这个语言尽可能的将一些决定从编译和链接时推迟到运行时。它会尽可能的动态的处理事情。这意味这个语言 
不仅需要一个编译器，还需要一个运行时系统去执行编译过的代码。这个运行时系统扮演着对于OC这个语言操作系统的的角色，使得这个语言得以运行。

这个教程将探究NSObject这个类以及OC这个语言和运行时系统是如何进行交互的。]]></description><category></category></item><item><title><![CDATA[C中的预编译宏定义]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46301507</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46301507</guid><author>wangjiangang_</author><pubDate>Mon, 01 Jun 2015 11:04:32 +0800</pubDate><description><![CDATA[在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的"宏(macro)"进行处理. 

C初学者可能对预处理器没什么概念, 这是情有可原的: 一般的C编译器都将预处理, 汇编, 编译, 连接过程集成到一起了. 编译预处理往往在后台运行. 在有的C编译器中, 这些过]]></description><category></category></item><item><title><![CDATA[OC中的宏定义]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46301453</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46301453</guid><author>wangjiangang_</author><pubDate>Mon, 01 Jun 2015 11:02:40 +0800</pubDate><description><![CDATA[1、先来几个常用的：





[csharp] view
 plaincopy






// 是否高清屏  
#define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UISc]]></description><category></category></item><item><title><![CDATA[OC Category(类别)]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46290699</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46290699</guid><author>wangjiangang_</author><pubDate>Sun, 31 May 2015 18:54:13 +0800</pubDate><description><![CDATA[类别（Category）的基本概念

       封装是面向对象的一个特征,OC也不例外,但是有的时候我们会碰到这样的一种情况,封装了一个类，不想再动它了，可是随着程序功能的增加,需要在那个类中增加一个小小的方法，这是我们就不必再在那个类中做修改或者在定义一个子类，只需要在用到的地方随手添加一个该类的类别（Category）即可。

   注：

（1）在类别中定义的方法，会成为原始]]></description><category></category></item><item><title><![CDATA[OC的动态特性]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46290517</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46290517</guid><author>wangjiangang_</author><pubDate>Sun, 31 May 2015 18:27:35 +0800</pubDate><description><![CDATA[OC做为一门面向对象语言，自然具有面向对象的语言特性，如封装、继承、多态。他具有静态语言的特性(如C++)，又有动态语言的效率(动态绑定、动态加载等)。整体来说，确实是一门不错的编程语言。
           
现在，让我来想想OC的动态语言特性。OC的动态特性表现为了三个方面：动态类型、动态绑定、动态加载。之所以叫做动态，是因为必须到运行时(run time)才会做一些事情。
     ]]></description><category></category></item><item><title><![CDATA[OC 中的方法重载？]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46289879</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46289879</guid><author>wangjiangang_</author><pubDate>Sun, 31 May 2015 17:18:51 +0800</pubDate><description><![CDATA[OC中没有严格的方法重载　　
　　　原因：OC不允许方法名相同。     注：　OC也没有运算符重载一说。
　例如：
        -(void)Test:(NSInter)one;
        -(void)Text:(float)two;
    上面两个方法名相同。在OC中是不允许的。 注： oc中方法名包括后面的冒号。


总结：
       oc和c++、jav]]></description><category></category></item><item><title><![CDATA[如何在优快云博客中显示图片？]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46288533</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46288533</guid><author>wangjiangang_</author><pubDate>Sun, 31 May 2015 14:44:11 +0800</pubDate><description><![CDATA[直接上图
      
     选择好图片文件后 
   
   然后在想在博文具体哪块插入图片 就将光标放在相应的地方 点插入即可]]></description><category></category></item><item><title><![CDATA[如何让自己代码在优快云博客中进行<代码块>显示?]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46288331</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46288331</guid><author>wangjiangang_</author><pubDate>Sun, 31 May 2015 14:21:50 +0800</pubDate><description><![CDATA[操作非常简单 ：
    直接上图
      
     点上图中箭头所指的图标


然后选择编程语言


选择好语言后 在下面的框里 黏贴代码 点确定即可]]></description><category></category></item><item><title><![CDATA[选择排序优化算法]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46288153</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46288153</guid><author>wangjiangang_</author><pubDate>Sun, 31 May 2015 13:59:26 +0800</pubDate><description><![CDATA[优化一：
         #include
         #define N 10    
        int main(){
             int a[N],max,k,temp,j;
        for(int i=0;i
  {
       scanf("%d",&a[i]);
   }
     for(i=0;i
   {
  max=i]]></description><category></category></item><item><title><![CDATA[oc中谓词的使用(NSPredicate)]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46225385</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46225385</guid><author>wangjiangang_</author><pubDate>Fri, 29 May 2015 09:41:22 +0800</pubDate><description><![CDATA[OC中的谓词操作是针对于数组类型的，他就好比数据库中的查询操作，数据源就是数组，这样的好处是我们不需要编写很多代码就可以去操作数组，同时也起到过滤的作用，我们可以编写简单的谓词语句，就可以从数组中过滤出我们想要的数据。非常方便。在Java中是没有这种技术的，但是有开源的框架已经实现了此功能。




下面来看一下具体的例子吧：

Person.h





[objc]]]></description><category></category></item><item><title><![CDATA[调用nil对象的方法(Calling Methods on Nil)]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46225013</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46225013</guid><author>wangjiangang_</author><pubDate>Fri, 29 May 2015 09:20:07 +0800</pubDate><description><![CDATA[在Objective-C里，nil对象被设计来跟NULL空指针关联的。他们的区别就是nil是一个对象，而NULL只是一个值。而且我们对于nil调用方法，不会产生crash或者抛出异常。

　　这个技术被framework通过多种不同的方式使用。最主要的就是我们现在在调用方法之前根本无须去检查这个对象是否是nil。假如我们调了nil对象的一个有返回值的方法，那么我们会得到一个nil返回值。
]]></description><category></category></item><item><title><![CDATA[oc中数组的四种遍历方式及比较]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46224879</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46224879</guid><author>wangjiangang_</author><pubDate>Fri, 29 May 2015 09:07:42 +0800</pubDate><description><![CDATA[因为iOS是兼容C语言的，所以C语言里面的最最常见的for循环遍历是没有问题的。

      本文中用的数组是获取的系统的语言数组，大约有30多个数据，虽然还不够模拟大批量的数据，但对于方法的验证是没有问题的了。





[objc] view
 plaincopy






NSArray *langArray = [[NSUserDefaults stan]]></description><category></category></item><item><title><![CDATA[c字符串与NSString之间的转换]]></title><link>https://blog.youkuaiyun.com/wangjiangang_/article/details/46126089</link><guid>https://blog.youkuaiyun.com/wangjiangang_/article/details/46126089</guid><author>wangjiangang_</author><pubDate>Thu, 28 May 2015 17:36:27 +0800</pubDate><description><![CDATA[char *s = "c String"; 

NSString *s1 = @"NSString"; 

注：
NSLog(@"NSString字符串 %@",s1); 与c区别的是：此处的s1是字符串对象。所以要用%@格式输出。 
转换方法：
   NSString转c字符串： 
char *s = [s1 UTF8String]; 
   c转NSString字符串：]]></description><category></category></item></channel></rss>