clang -rewrite-objc的使用点滴】的更多相关文章

1. 源码变换 第一章我们提到过,CLAS的本质是对源码做一次非常简单的变换(有些文章里称作变形),即Source-Source-Transformation,将打点代码精确地插入到目标函数的首部,保存到临时文件,代替原始文件传递到Clang进行编译.这个变换过程对于Clang的编译流程没有侵入,保证了与不同版本Clang一定的兼容性,即使Clang进行小版本升级CLAS仍然可以正常工作无需重新编译(例如Xcode从8.2.1升级为8.3.3).围绕着源码变换可以做出许多非常有创意的工具,大家有…
clang教程之实现源源变化 声明:本教程来自于Eli Bendersky's website 原文地址:http://eli.thegreenplace.net/2014/05/01/modern-source-to-source-transformation-with-clang-and-libtooling/ 众所周知,LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成.其发端源于2000年伊利诺伊大学厄巴纳-香槟分校(UIUC)的维克拉姆·艾夫(Vikram Adve)与其…
前言 现在有一种说法,是开启arc选项时,已经没有栈上的block了,所以所有的block都不需要copy来拷贝到堆上了.那么这个说法正确与否呢? 结论是这个说法必须是错误的,首先的一点就是arc只是编译器帮助我们给对象自动增加retain,release方法,我们不需要手动的去管理这些成对出现的内存计数方法,其本质上与mrc是一脉相承的,所以arc下必然还是有stack block的. 再次可以简单的写一个例子(就举参考1的要点3): 1 -(id) getBlockArray{   2   …
➠更多技术干货请戳:听云博客 clang -rewrite-objc的作用是把oc代码转写成c/c++代码,我们常用它来窥探OC的一些秘密. 1.最简单的例子 main.m的代码如下: int main(int argc, char * argv[]) {      int i=1 ;     __blockint j=0;     void(^aBlock)(void)=^{          j+=2*i;     };     aBlock();     return 0;  } 打开终端…
blog.sunnyxx.com 我是前言 学习objc时,尤其是先学过其他编程语言再来看objc时,总会对objc的类声明的关键字interface感到有点奇怪,在其它面向对象的语言中通常由class关键字来表示,而interface在java中表示的却大约相当于objc的protocol,这个关键字的区别究竟代表了objc语言的设计者怎样的思想呢,在objc类设计中需要注意哪些问题呢?接下来对这个问题进行一些思考和探究. interface? 先来段Wiki: In object-orien…
原文地址:http://clang.llvm.org/docs/InternalsManual.html 译者:史宁宁(snsn1984) "Clang"C语言前端内部手册 简介 这个文档描述了比较重要的API中的一部分API,还表述了Clang C语言前端中的一些内部设计想法.这个文档的目的是既把握住高层次的信息的同时也对这些高层次的信息背后的设计思路进行一些介绍.这篇文档面向的是打算hacking(这个词的具体含义在这里实在不好把握,感觉英文更容易表达具体含义)Clang的人,而不…
clang -fobjc-arc -framework Foundation helloworld.m -o helloworld.out OVERVIEW: clang LLVM compiler USAGE: clang [options] <inputs> OPTIONS: -### Print (but do not run) the commands to run for this compilation --analyze Run the static analyzer -arcm…
首先要说说什么时候使用weakSelf和strongSelf. 下面引用一篇博客<到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf>的内容: Objective C 的 Block 是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发.异步任务.但是,如果使用不当,Block 也会引起一些循环引用问题(retain cycle)-- Block 会 retain 'self',而 'self' 又 retain 了 Block.因为在 ObjC…
官方文档:http://clang.llvm.org/docs/ClangFormatStyleOptions.html 中文 在代码中配置样式 当使用 clang::format::reformat(...) 方法, 格式将被clang::format::FormatStyle 框架指定. 配置格式化样式选项 这一部分列出了被支持的选项. 每个操作都有指定类型. 枚举类型的可能的值,被C++枚举(一个预编译,例如:LS_Auto)和配置中的一个值(没有预编译:Auto)指定. BasedOnS…
首先要说说什么时候使用weakSelf和strongSelf. 下面引用一篇博客<到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf>的内容: Objective C 的 Block 是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发.异步任务.但是,如果使用不当,Block 也会引起一些循环引用问题(retain cycle)—— Block 会 retain ‘self’,而 ‘self‘ 又 retain 了 Block.因为在 ObjC…
原文:http://blog.sunnyxx.com/2014/08/02/objc-weird-code/ [娱乐向]objc最短的方法声明 先来个娱乐向的.方法声明时有一下几个trick: 返回值的- (TYPE)如果不写括号,编译器默认认为是- (id)类型: 1 2 - init; - (id)init; // 等价于 同理,参数如果不写类型默认也是id类型: 1 2 - (void)foo:arg; - (void)foo:(id)arg; // 等价于 还有,有多参数时方法名和参数提…
原文链接:obj-c编程16:键值编码(KVC) 我们可以借助obj-c中的键值编码(以后简称KVC,Key-Value Coding)来存取类的属性,通过指定所要访问的属性名字符串标示符,可以使用存取器方法来获取或设置类的属性.下面的例子,借助于KVC的功能读取和设置了类Son实例的属性i: #import <Foundation/Foundation.h> #define msg(...) NSLog(__VA_ARGS__) #define mki(x) [NSNumber number…
这第4篇内容比較少,主要说的是obj-c中的类的继承,须要说明的是我仅仅是写了继承中最简单的形式,假设所有展开来说,那就多了去了!关键是如今肚子里还没装够墨水,没法展开啊! 以下的代码中,我们写了2个类:父类A和子类B,然后B中对A中的方法做了重写. #import <Foundation/Foundation.h> @interface A:NSObject{ int i; } @property int i; -(void)print; @end @implementation A @sy…
1. 配置LLVM和Clang 在这篇文章里,我们会基于上一篇所述的方案进行展开,详细讲解如何从0开始创建一个基于Clang LibTooling的编译器前端工具.在开始之前,我们假设你已经基本了解何为抽象语法树AST,我们后面的所有内容都是基于对AST的解析完成的.如果不了解AST,请移步官方文档Introduction to the Clang AST补全基础知识,或者这篇中文文章. 此外我们还需要下载并配置好LLVM和Clang的源码环境.LLVM和Clang的源码都可从llvm.org上…
我们在Xcode中使用objc写代码的时候往往会碰到动态调用方法的时候. 如果是静态调用这很常见,不会有任何问题: [self performSelector:@selector(method)]; 但如果method是运行时变化的值,则编译器就会发出警告: 简单来说,这是因为编译器在开启ARC后不知道该方法的返回值是什么,该如何处理,是标记为ns_returns_retained还是ns_returns_autoreleased. 在网上搜了一下有几种办法可以解决,首先如果动态调用的方法不返回…
乖乖隆地洞,这篇文章内容可是不得了,内存管理哦!首先,这个要是搞不明白,你就等着进程莫名其妙的挂死,或是疯狂申请内存却不释放,结果被OS杀死,不管是"自杀"还是"他杀",都不是那么好玩的哦.其次要记住这可不是windows 中的内存管理(Win32 api),也不是linux中C like的内存管理方法.这个比他们都"高级"的多啊!但是没有ruby的高级,也没有ruby的简单,如果mac编程用ruby的就好了,这不搞出一个雨燕(SWFIT)来啊!…
我们知道在mac或iphone上编程最终逃不开os x平台,你无法在windows或linux上开发纯正的apple程序.(so不要舍不得银子买mac啦)虽说linux和windows上有移植的obj-c编译器,但是平台开发框架还是在mac上啊.比如cocoa框架包括Foundation框架,Application Kit框架和Core Data的第三方框架;二cocoa Touch指的则是Foundation,Core Data以及UIKit框架.对于Foundation框架中各个类的使用,可…
好了,到了相对轻松的话题,也是所有语言无可避免的话题:异常的处理. 我们知道对于一些常见的语言,"异常"是逃不开避不掉的主题:C中相对原始的signal或依赖系统异常支持(比如windows),C++和C#以及java中完善的内置语法,还有ruby中灵活的动态方式,在这里我们看到的是和java类似的obj-c的方法: #import <Foundation/Foundation.h> int main(int argc,char *argv[]) { @autoreleas…
我们知道对于现如今的动态语言比如ruby而言,反射和元编程以及支持的非常灵活了,你完全可以跳过常规的手段,而利用反射来查询或调用对象的私有方法.而obj-c对反射的支持略显小繁琐,而且在开了ARC后同样出错.就算不开ARC,为啥明明有那个方法却不能调用呢?为啥double变量不让直接转成id呢?蛋疼啊,上代码: #import <Foundation/Foundation.h> @interface A:NSObject{ double i; } @property double i; -(d…
说实在的,写这第5篇的时候十分纠结,代码老是不能动态绑定,在编译时就会出错,最后发现这是开了ARC的原因.开了ARC obj-c就不能动态绑定了吗?这个问题还不清楚哦.把ARC关闭后,虽然会有警告,但运行是正确的.下面上代码: #import <Foundation/Foundation.h> @interface A:NSObject{ double i; } @property double i; -(double)mul:(double)x; -(void)show; @end @imp…
我们在此篇对obj-c编程01中的Box的例子稍加改动,一是添加的自动合成存取器,二是将Box按照其标准的写法分成3个文件,即头文件Box.h,类实现文件Box.m,以及主文件test.m. 1.Box.h #import <Foundation/Foundation.h> @interface Box:NSObject{ int l; int w; } @property int l,w; -(void)print; @end 2.Box.m #import "Box.h"…
我们可以借助obj-c中的键值编码(以后简称KVC,Key-Value Coding)来存取类的属性,通过指定所要访问的属性名字符串标示符,可以使用存取器方法来获取或设置类的属性.下面的例子,借助于KVC的功能读取和设置了类Son实例的属性i: #import <Foundation/Foundation.h> #define msg(...) NSLog(__VA_ARGS__) #define mki(x) [NSNumber numberWithInt:x] @interface Son…
1.clang -rewrite-objc main.m #import <objc/runtime.h> #import<objc/message.h> #import <Foundation/Foundation.h> @interface Person : NSObject //为了方便查看重写的代码将name改成cjmName @property (nonatomic, copy) NSString *cjmName; @property (nonatomic,…
转载,原文: http://blog.lessfun.com/blog/2014/11/22/when-should-use-weakself-and-strongself-in-objc-block/ 当然有一个更详细的专题: http://tanqisen.github.io/blog/2013/04/19/gcd-block-cycle-retain/ Objective C 的 Block 是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发.异步任务.但是,如果使用不当,B…
1. ObjC的基础 2. ObjC2.0中的编译指令 3. ObjC Runtime 4. ObjC Object Model 5. ObjC的新语法 6. FQA 1. ObjC的基础 2. ObjC2.0中的编译指令 http://www.learn-cocos2d.com/2011/10/complete-list-objectivec-20-compiler-directives/ http://developer.apple.com/library/mac/#releasenotes…
1. instancetype http://nshipster.com/instancetype/ 2. Objc的扩展 http://clang.llvm.org/docs/LanguageExtensions.html…
元旦三天假跟妹子冷战一天半,剩下的半天觉得无聊,可以写点东西,折腾了下xCode 6.1,虽然iPhone6比较丑,但是不影响IOS在高端机上面的地位,ObjC是扩充C的面向对象编程语言.主要使用于Mac OS X和GNUStep这两个使用OpenStep标准的系统,在NeXTSTEP和OpenStep中它更是基本语言.ObjC可以在GCC以及Clang运作的系统上编写和编译,因GCC与Clang含Objective-C的编译器.1980年代初布莱德·确斯(Brad Cox)在其公司Stepst…
本文转载至 http://blog.csdn.net/c395565746c/article/details/7573793   当对象经过在dealloc方法处理时,该对象就已经处于已销毁状态,其它对该对象发任何消息都会报错   视图对象的创建.alloc..可以发生在其它线程.   「initWithNibName: bundle:」载入nib档案来初始化 「loadView」载入视图 「viewDidLoad」在载入视图至内存后会呼叫的方法 「viewDidUnload」在视图从内存中释放…
前言 之前的文章有说过 Atomic 原子操作的原理,其作为一个特殊的修饰前缀,影响了存取操作. 在属性修饰定义中,还有另一类修饰前缀,他们分别是 strong weak assign copy,这些又有什么区别呢? 平时喜欢探究的同学,可能也见过 unsafe_unretained,这个又是什么呢? 让我们从属性修饰入手,逐步揭开弱引用的面纱. 原理 属性自动生成的实现方法是怎么样的? 首先我们先创建一个示例代码文件作为样本. #import <Foundation/Foundation.h>…
编译选项相关: 想要添加的选项,以我添加的-fdpu为例子 能通过clang --help得到的选项,整体需要一个解析文件(好像在LLVM项目中都是通过后缀名为xxx.td和xxx.def的文件来进行存储的,然后通过xxx.h声明,xxx.cpp真正进行解析) 比如添加-fdpu,是在clang/include/Driver/Options.td添加相应的选项(其实就是凭感觉加,感觉和哪个比较像就对应加一个,具体的内容没研究明白),我是加成了这样: def fdpu : Flag<["-&…