【发布时间】:2013-12-02 05:36:42
【问题描述】:
在 Objective-C 中,有没有办法在每次实例化对象时自动运行特定的选择器? (我知道+initialize,但我需要一个实例方法)。
具体来说,我正在编写一个自定义字符串类(它继承自我自己的根类,具有与NSObject 类似的接口),并且我试图让它与 Objective-C 常量字符串“很好地配合”。为此,我有以下类定义(根据运行时的要求):
// 1) Required Layout
@interface MYConstantString : MYObject {
//Class isa; inherited from MYObject
char *c_string;
unsigned int length;
}
现在,我想通过在类中使用指向 C-struct 的指针来实现我的字符串类(这个“C 对象”已经很好地实现了,所以我基本上只想将它包装在一个 Objective-C 类中)。因此,理想情况下,我的 Objective-C 类应该是这样的:
// 2) Desired Laout
@interface MYConstantString : MYObject {
// Class isa;
StringObject *string;
}
然后类和实例方法将使用 StringObject 包装 C 函数调用。
因此,因为我无法获得所需的 ivar 布局 (2),所以我希望绕过所需的 ivar 布局 (1) 来为我工作。例如:
- (void)fixup {
// Pseudocode
temp = copystring(c_string);
c_string = (void *)StringObjectNewWithString(temp); // Fudge pointer
length = ... // I can do something else with this.
}
那么,回到这个问题,有没有办法自动调用-fixup,而不是每次我写一个Objective-C常量字符串时都必须执行以下操作?
MYConstantString *str = @"Constant string";
[str fixup];
我知道这是一个淫秽的 hack,Objective-C 常量字符串的互操作性对于我需要的东西并不完全重要,但是能够使用 @"" 语法并使代码更“自然”会很好' 目标-C。
【问题讨论】:
标签: objective-c string objective-c-runtime