ОБНОВЛЕНИЕ:
С некоторыми ключевыми предложениями и взад и вперед с Джорджем я придумал два разных способа достичь именно того, что я хочу в CodeRunner, и разместил их на сайте Github gist: Суть АОП Objective-C
Код грубый, потому что это новая концепция, и я закончил ее только в 1:30. Тем не менее, он определенно работает и имеет некоторые тонкости, такие как автоматическое добавление всех методов, которые не являются инициализаторами, геттерами или сеттерами. [КОНЕЦ ОБНОВЛЕНИЯ]
Несколько раз (но, конечно, не очень часто) я сталкивался с ситуацией, когда мой код был бы немного СУШЕ, если бы я мог вызывать контекстно-зависимый фрагмент кода для каждого метода в классе. Использование среды выполнения Objective-C совершенно нормально, я бы также принял решения C или C ++.
Вместо:
- (void)methodName1
{
self->selector = _cmd;
NSLog(@"This method is named: %@",_cmd);
//more code
}
- (void)methodName2
{
self->selector = _cmd;
NSLog(@"This method is named: %@",_cmd);
//more code
}
Сделайте что-нибудь вроде этого с тем же результатом:
+ (void)AOPMethod
{
self->selector = _cmd;
NSLog(@"This method is named: %@",_cmd);
}
- (void)methodName1
{
//more code
}
- (void)methodName2
{
//more code
}
В реальном приложении AOPMethod будет содержать больше кода, и в классе будет больше методов.
P.S., Я очень помешан на DRY. Наряду с ясностью изложения и производительностью, это ключевой компонент моей оценки качества кода в долгосрочной перспективе. Для каждого нового способа, которым я могу избежать повторения, выгода экспоненциальная, потому что я прерываю как можно больше кода в повторно используемых классах, которые используются во многих проектах.