Сбой в objc _Сохранение в методе, выполненном с помощью PerformSelector

У меня есть этот странный сбой, связанный с вставкой ARC auto -objc _, который сохраняется в моем коде.

У меня есть следующие два класса:

@interface MenuItem : NSObject
@property (weak, nonatomic) id target;
@property (unsafe_unretained, nonatomic) SEL action;
@property (strong, nonatomic) id object;
- (instancetype)initWIthTarget:(id)target action:(SEL)action withObject:(id)object;
- (void)performAction;
@end

@implementation MenuItem 
- (void)performAction
{
    if (self.target && self.action)
    {
      if (self.object)
      {
        [self.target performSelector:self.action withObject:self.object];
      }
      else
      {
        [self.target performSelector:self.action];
      }
    }
}
@end

@interface Widget : NSObject
- (void)someMethod:(id)sender;
@end

В какой-то момент я создаю экземпляр MenuItem как таковой:

MenuItem *item = [MenuItem alloc] initWithTarget:widget action:@selector(someMethod:) object:nil];

Затем в другом месте я вызываю performActionв пункте меню :

 [item performAction];

. При реализации someMethodу меня вылетает:

@implementation Widget
- (void)someMethod:(id)sender
{
  // EXEC_BAD_ACCESS crash in objc_retain
}
@end

Почему это происходит?

10
задан orj 9 August 2012 в 02:33
поделиться