В Objective-C существует ли способ запуска определенного селектора автоматически при каждом экземпляре объекта? (Я знаю о +initialize
, но мне нужен метод экземпляра).Автоматический запуск селектора при создании экземпляра
В частности, я пишу пользовательский класс строк (который наследуется от моего собственного корневого класса с аналогичным интерфейсом до NSObject
), и я пытаюсь заставить его «отлично играть» с константными строками Objective-C. Для этого у меня есть следующее определение класса (в соответствии с требованиями выполнения):
// 1) Required Layout
@interface MYConstantString : MYObject {
//Class isa; inherited from MYObject
char *c_string;
unsigned int length;
}
Теперь я хочу, чтобы реализовать свой струнный класс, используя указатель на C-структуры внутри класса (это «C объект "уже хорошо реализован, поэтому я просто хочу обернуть его в класс Objective-C). В идеале, следовательно, мой класс Objective-C будет выглядеть следующим образом:
// 2) Desired Laout
@interface MYConstantString : MYObject {
// Class isa;
StringObject *string;
}
И тогда методы класса и экземпляра просто оберните функция C вызовы с помощью этого StringObject
.
Так как я не могу иметь желаемую компоновку ивара (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];
Я знаю, что это непристойно хак, и Objective-C постоянная строка совместимости не является абсолютно решающим для того, что мне нужно, но было бы неплохо, чтобы иметь возможность использовать синтаксис @""
и сделать код более «естественно» Цель-C.
Простите, да, 'MYConstantString', а не' NSConstantString'. Я рассмотрел кластер классов, но я не думал о переводе и выходе из StringObject - возможно, лучший способ получить то, что мне нужно, спасибо! – Ephemera