new Objective-C Runtime Features

陆翰藻
2023-12-01

简介:

    Objective-C有两种Runtime:Modern Runtime和Legacy Runtime。

    Modern Runtime运行在大多数现在平台和体系结构中,他是Apple几年前开始64bits开发的时候重新编写的。Legacy Runtime是NextStep1990时代的产物。Legacy Runtime因为2进制兼容问题而无法支持一些特性,而Mordern Runtime的设计目标就是支持这些特性。

    Legacy Runtime在32-bit MacOS以及32-bit上的iPhone模拟器上运行着。Modern Runtime运行在64-bit MacOS,iPhone Device以及64-bits下的iPhone Simulator上。对于雪豹上面的iOS开发者,他们不用再担心模拟器和真机跑在不同的Runtime下,真对于iOS开发者来说的一个重大意义是:你现在可以生成一个应用程序,然后同时运行在不同iPhone Simulator下面(细心的用户可能会注意到,iOS SDK4开始,编译一个版本后,要切换不同device的模拟器并不需要重新编译代码了)

 

Objective-C语言和Runtime高级技术:(编译器方面Xcode4支持,iOS3.1以后支持,MacOS不支持,iPhone和MacOS的SDK都还不支持,姑且认为这些都是明年会用到的东西)

    老的Runtime的一些技术:

    (1)class extensions

    (2)@synthesized properties

    (3)weak-linked class

 

    class extensions:是你的class的第二个或者第三个,甚至第四个(以此类推)interface,他看上去就像一个匿名的category。在class extensions里面,你可以定义额外的方法,他们不会在public 接口里面出现。

 

example:

PetShowView.h中定义一个petShopView

@interface PetShopView : NSView {

}

@property (readOnly ) int poppyFood;

@end

 

在PetShowView-Private.h中定义这个类的扩展

@interface PetShowView()

@property (readWrite ) int poppyFood;

-(void) feedSnakeWith:(id)Food;

@end

    新特性允许你在 class extension里面也定义属性!并且只在LLVM 编译器中提供这个功能,GCC不支持。并且需要一些编译属性支持: C Flags = -XClang - fobjc -nonfragile-abi2

@interface PetShowView()

{

@private

   NSArray * kittens;
}

@property (readWrite) int poppyFood;

-(void) feedSnakeWith:(id)Food;

@end

 

      @synthesized,帮你自动完成setter,getter。新特性是,Xcode4设置让你synthesize都不用写。 不过当你不需要编译器完成这些工作,只工作在Modern Runtime下,需要LLVM编译器。当你不需要编译器做这些的时候,可以用@dynamic方法来做,具体自己也没试演过,先记一笔

 

      Weak Link,让你使用新特性(新的类)的同时,兼容老的iOS。一般的做法是:

      Class testClass = NSClassFromString(@"className");

      if (testClass){Do something}

      else {do Other things}

      而且,如果继承了一些目标iOS平台上没有的类,那么运行时会crash。

      新特性解除了后面那个限制,并且使用起来更简单。不过不幸的是。。还没完全实现。。要等明年,需要Xcode4里面的GCC或者LLVM,Runtime需要iPhoneOS3.1,SDK还没有实现

      if([SomeClass class])

      {

           [SomeClass doSomeThing];

      }

      else
      {

           do OtherThing

      }

 

 

 类似资料:

相关阅读

相关文章

相关问答