`

LLVM compiler 4.0带来的Objective-C新语法特性

    博客分类:
  • ios
阅读更多

LLVM 是 Low Level Virtual Machine (低级虚拟机)的简称,这个库提供了与编译器相关的支持,可以作为多种语言编译器的后台来使用。能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。

LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。

 

Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性

1.使用的方法代码放置的位置顺序无关,没在.h文件中声明的方法,有的时候如果方法不在前面,可能会有警告。新的编译器会先扫描代码中的方法然后在编译,方便很多。

2.@property对于使用Objective-C的程序员来说是相当熟悉的,property方便自动生成变量的getter 和setter。在.h文件中声明之后,还要在.m文件中加上@synthesize关键字,这样才能完成自动getter 和setter的过程。

比如说,我在.h文件中写了

@property (strong, nonatomic) NSDictionary *order;

我还要去对于的.m文件中写上

@synthesize order;

是不是感觉很多余啊?现在在语法新特性中不用写这行代码了,新版的编译器帮你实现这行代码。也是说,你在.h文件中声明order属性后,就可以直接在实现文件中使用该属性的getter和setter方法,编译器还会根据属性的可读和可写自动判断是否提供setter方法。智能多了。

3.更多新特性参考:http://lxmdrw.blog.163.com/blog/static/2771697120128195203370/

 

 

 

__unsafe_unretain、__strong、__weak、__autoreleasing是出现在 LLVM 编译器 3.0版本之后。而__unsafe_unretain、__strong、__autoreleasing可以在不使用ARC(自动参考计数)可用。在ARC下,默认的指针都是__strong属性。这意味着一个对象赋值给另外一个指针,那么只要指针参考了该对象,该对象就会一直保持。这对于大部分对象都实用,但是这可能会导致retain cycle。例如,你拥有一个对象包含了另外了一个实例变量对象,但是第二个对象又把前一个对象作为它的委托,那么这两个对象将不会被释放。


因为上面的原因,所以才有了__unsafe_unretain和__weak限定符存在。他们通常用来修饰delegate,即定义一个delegate的属性时,使用__unsafe_unretain和__weak来修饰,然后通过使用__unsafe_unretain和__weak来单独标记实例变量。这意味着delegate实例变量将仍然能够指向第一个对象,但是它不会导致保留第一个对象,因此打破了retain cycle,而能够释放两个对象


除了delegate,__unsafe_unretain和__weak修饰符也还能避免你的代码出现retain cycle。Leaks instrument现在包含了一个cycle视图,能够发现你的应用中的retain cycle,并图像显示出来。


__unsafe_unretain和__weak都能避免retain cycle,但是他们也有一些细微的不同。对于__weak,当释放指针指向的对象时,该对象的指针将转换为nil,这是比较安全的行为。而__unsafe_unretain,正如其名称隐藏的含义,尽管释放指针指向的对象时,该指针将继续指向原来的内存。这将会导致应用crash,所以是unsafe。


为什么我们仍要使用__unsafe_unretain呢?这是因为__weak直到iOS5.0以及lion之后才出现。


而__autoreleasing 的英文解释为:to denote arguments that are passed by reference (id *) and are autoreleased on return,即主要是在引用传参时使用。 

 


 

分享到:
评论

相关推荐

    The Objective-C 2.0 Programming Language

    Objective-C 2.0是苹果公司在2005年发布的一个重要版本,其中引入了许多新特性来提高性能和简化编程过程。 #### 三、Objective-C 2.0的主要特性 ##### 3.1 类与对象 Objective-C 2.0支持传统的面向对象编程概念,...

    C++和Objective-C混编 如何在xcode中用C++的STL

    Objective-C是C的超集,增加了面向对象特性,如类别(Category)、协议(Protocol)和消息传递。而C++则是在C的基础上加入了类、模板和异常处理等面向对象编程概念。由于它们在语法上的不同,混编时需要遵循一定的...

    LLVM-10.0.0-win64.exe

    在Objective-C开发中,Clang特别重要,因为它能够理解Objective-C的语法特性,如消息传递和类别等。它还能与LLVM的其他部分结合,为Objective-C程序提供高级的优化和分析。 总结来说,LLVM和Clang的组合为C、C++和...

    Swift与OC的混编

    首先,Swift与Objective-C的混编基于Apple的Clang编译器和LLVM工具链,它们能够理解并转换两种语言的语法。为了在Swift项目中引入Objective-C代码,你需要确保你的Xcode项目设置正确。"Swift中使用OC.xcodeproj"这个...

    Windows下搭建Objective C开发环境

    Objective-C的编译器主要有LLVM(由GCC发展而来,主要用于苹果平台)和GnuStep。GnuStep提供了Windows版的GCC编译器,可以配合Code::Blocks进行Objective-C程序的编译和调试。首先,访问GnuStep网站...

    llvm-tutorial-standalone:已弃用(使用:https:github.comllvm-hsllvm-hs-kaleidoscope)

    这个项目最初由Chris Lattner在2003年开发,现在已经成为一个广泛使用的编译器基础设施,支持C、C++、Objective-C、Swift等多种编程语言。本教程原名为"llvm-tutorial-standalone",但现在已被官方弃用,推荐使用...

    clang-user-manual, clang 中文用户手册&llvm; 文档.zip

    Clang是LLVM项目的一部分,是一个轻量级且高效的C、C++、Objective-C以及Objective-C++的前端,而LLVM则是一个模块化的编译器基础设施,可以用于构建各种编译工具。 1. Clang简介:Clang的主要特点是它的快速编译...

    LLVM Cookbook

    由于其模块化的设计,LLVM可以用于不同的编程语言的编译,包括但不限于C、C++、Objective-C、Fortran、Ada以及各种脚本语言。 本书《LLVM Cookbook》详细介绍了如何使用LLVM进行编译器设计和使用。本书内容涉及LLVM...

    LLVM_exp5a_InstrucitonList.7z

    2. **Frontends**:LLVM支持多种编程语言的前端,如C、C++、Objective-C、Swift、Rust等,将这些语言的源代码转化为LLVM IR。 3. **Optimizers**:LLVM提供了丰富的代码优化器,例如常量折叠、死代码消除、循环展开...

    C语言编译器编写C语言的工具(杨力超)

    - **Clang**:轻量级且快速的编译器,是LLVM项目的一部分,支持C、C++、Objective-C和Objective-C++。 - **Microsoft Visual C++**:微软提供的IDE,内置C和C++编译器,主要针对Windows平台。 - **MinGW**:...

    深入剖析 iOS 编译 Clang / LLVM

    Clang作为LLVM项目的一个重要组成部分,是C、C++以及Objective-C编译器的前端,它以快速编译、模块化设计以及良好的集成性而著称。 首先,让我们来探究LLVM的多面性。LLVM不仅可以用于常规编译器的构建,还能够被...

    llvm:项目移至:https:github.comllvmllvm-project

    2. **Clang**:Clang是LLVM项目的一部分,是一个C、C++、Objective-C和Objective-C++的前端。它将源代码转化为LLVM IR,提供了快速的编译速度和优秀的错误消息。 3. **LLVM Compiler**:LLVM包含一套后端,可以生成...

    iOS block编程要点

    block是C级别的语法和运行时特性,和标准C函数类似,但它可以绑定变量自动绑定(栈)或内存托管(堆),因此能够维护一个状态集(数据),在执行时可以影响程序行为。开发者可以用block编写函数表达式,并将其作为API...

    C compiler documentation

    1. GCC(GNU Compiler Collection):开源且跨平台,支持多种语言,包括C、C++、Objective-C等。 2. Clang:轻量级且快速,与LLVM项目一起使用,提供更好的错误报告。 3. Microsoft Visual C++:Windows平台上的开发...

    可待因:适用于ClangLLVM的Mac OS X IDE

    在IDE特性上,Codeine支持C语言的语法高亮,使得源代码更易读,有助于开发者快速定位和理解代码。对于C++和Objective-C的支持,则让开发者可以在同一环境中处理Cocoa和Objective-C++项目,这对Mac OS X应用的开发至...

    C compiler.zip

    C编译器是编程语言中的一个关键工具,它将程序员用C语言编写的源代码转换成计算机可执行的机器码。C语言是一种广泛使用的、低级的、过程性的编程语言,由贝尔实验室的Dennis Ritchie在1972年开发。它的设计目标是...

    Blocks apple

    1. **Blocks as a Syntactic and Runtime Feature**: Blocks是C级别的语法和运行时特性,类似于标准的C函数,但它们不仅包含可执行代码,还可以包含对栈上或堆上自动管理内存的变量绑定。这意味着一个block可以保持...

    编译原理实验:词法分析,语法分析和中间代码生成及优化

    使用gcc(GNU Compiler Collection)可以进一步了解目标代码生成和链接过程,它是一个完整的编译系统,包括C、C++、Objective-C、Fortran等多种语言的编译器。 通过这些实验,你不仅会掌握编译原理的基本概念,还将...

    Olifant:一种针对LLVM的简单编程语言

    LLVM的Clang项目是一个C、C++和Objective-C的前端,它也可以作为其他语言的前端使用,Olifant可能就是这样一个受益者。Clang提供了快速的编译速度和良好的错误报告,这使得Olifant在开发过程中具有更好的反馈机制,...

    iOS Blocks 编程要点(中文翻译完整版)

    Block对象是一种C级别的语法和运行时特性,类似于标准C函数但具有更强的功能。Block不仅可以包含可执行代码,还可以封装局部变量,这些变量根据Block的生命周期而存在。Block能够捕获并记住变量的状态,即使在Block...

Global site tag (gtag.js) - Google Analytics