Tag: objective c runtime

Objective-C运行时如何实例化根元类和其他类描述?

我正在尝试实现一个基本的面向对象的ANSI C运行时并使用Objective-C作为指导。 它们似乎分为三部分。 类描述,类接口和类实现。 为了实例化类接口,只有运行时已使用类描述实例化类对象时,才能使用熟悉的使用Class对象实例化对象的方法。 那么在第一次运行时是否静态分配了所有类定义,以提供使用Class对象进行实例化的能力? 或者如果它们是动态分配的(在初始呼叫时),如何? 它是运行循环的一部分还是Class实际上是一个函数,它确定在转发消息之前是否已经分配了它?

我如何获得ivar的Objective-C类?

我在unit testing中创建了一堆简单的NSManagedObject 。 它们只有一个NSString *类型的name属性。 我总是给我的NSManagedObject相同的entityName和Class名称。 我想避免编写以下代码30次来设置unit testing: @interface FooTest : GHTestCase { Foo *foo; } @end @implementation FooTest – (void) setUp { [super setUp]; foo = [NSEntityDescription insertNewObjectForEntityForName:@”Foo” inManagedObjectContext:managedObjectContext]; foo.name = @”foo”; } @end 由于foo是一个ivar,我认为我应该能够写一个宏来获取foo ( Foo )的类型,并用来创建我的Foo : #define InsertManagedObjectByVariable(variable) \ do { \ variable = [NSEntityDescription insertNewObjectForEntityName:NSStringFromClass([typeof(variable) class])]; \ variable.name = (NSString […]

Objective-C中的星号用法

我有一个关于在Objective-C中使用星号的问题。 需要明确的是:我理解指针是什么以及程序C中的所有内容。我想知道两件事情: 1)为什么所有(引用)Objective-C对象指针? 为什么不是普通变量? (即NSArray数组= [[NSArray alloc] init];) 2)为什么在调用方法时省略星号? 谢谢!