objective-c - 在 Objective C 中构建动态类

标签 objective-c ruby dynamic objective-c-runtime

我是一个有点称职的 ruby​​ 程序员。昨天我决定最终尝试使用 Apple 的 Cocoa 框架。帮助我以 ObjC 的方式看待事物?

我正在努力了解 objc_allocateClassPairobjc_registerClassPair。我的目标是动态生成一些类,然后能够像使用任何其他类一样使用它们。这在 Obj C 中有效吗?

分配并注册类 A 后,调用 [[A alloc] init]; 时出现编译错误(显示为 'A' Undeclared)。我只能使用运行时的 objc_getClass 方法实例化 A。有什么方法可以告诉编译器有关 A 的信息,并像我向 NSString 那样传递消息吗?编译器标志或其他东西?

我有 10 个左右的其他类(BC、...),它们都具有相同的父类(super class)。我想直接在代码中向它们发送消息([A classMethod][B classMethod]、...)而不需要 objc_getClass。我是想在这里过于动态还是只是在搞砸我的实现?看起来像这样……

 NSString *name = @"test";  
 Class newClass = objc_allocateClassPair([NSString class], [name UTF8String], 0);  
 objc_registerClassPair(newClass);  

 id a = [[objc_getClass("A") alloc] init];  
 NSLog(@"new class: %@ superclass: %@", a, [a superclass]);  
 //[[A alloc] init]; blows up.

最佳答案

[[A alloc] init]; 崩溃的原因是编译器不知道A 是什么意思。编译器永远不知道 A 甚至在那里。

编辑:此外,看起来您想要的是:

@interface A : NSObject {
  NSString *myString;
}

- (id)initWithString:(NSString *)string;

- (void)doItToIt;

@end

或许

@interface NSString (MyPrivateExtension)

- (void)doItToIt;

@end

关于objective-c - 在 Objective C 中构建动态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2447497/

相关文章:

ios - 如何在iOS中使用Google Place API以GMSPlaces而不是GMSAutocompletePrediction的形式获取自动完成的搜索位置结果?

ruby - 在 Ruby 的变量中保存多个正则表达式缓冲区?

android - java.io.IOException : Cannot find PROCESSED_RES output for Main [Dynamic Feature Module] 异常

c# - 使用 LINQ 将 List<dynamic> 转换为 List

iphone - 如果我们没有启用 AirPrint 的打印机,如何从 iPhone App 测试打印?

ios - 在 OS X Yosemite、xCode 6 上构建 libxml2-2.9.2

objective-c - IOS 从一个 View 访问另一个 View

ruby-on-rails - 从 html 代码获取 youtube 视频 ID

ruby-on-rails - 为明天的 Ruby 创建一个 DateTime

Android:使用来自内部存储的 XML 布局