Iphone ARC问题-无法将方法传递给委托?
这是我的设想。我有一个类a。在它的实现中,我创建类型B的对象,并将B的委托设置为self(因此Iphone ARC问题-无法将方法传递给委托?,iphone,objective-c,ios,automatic-ref-counting,Iphone,Objective C,Ios,Automatic Ref Counting,这是我的设想。我有一个类a。在它的实现中,我创建类型B的对象,并将B的委托设置为self(因此B.delegate=self在类a的实现中的某个地方) 类有一个实例方法-(void)printThis 现在在B的实现中,当我尝试执行[delegate printThis],它给了我以下错误: “此选择器的实例方法未知” 当然,这是我启用ARC的时候。上面的委托模式在没有ARC的IOS4.x中运行良好。当我关闭ARC时,它仍然会这样。ARC与向代表传递消息有什么关系 骨架代码: A.h 上午 B.
B.delegate=self
在类a的实现中的某个地方)
类有一个实例方法-(void)printThis代码>
现在在B的实现中,当我尝试执行[delegate printThis]代码>,它给了我以下错误:
“此选择器的实例方法未知”
当然,这是我启用ARC的时候。上面的委托模式在没有ARC的IOS4.x中运行良好。当我关闭ARC时,它仍然会这样。ARC与向代表传递消息有什么关系
骨架代码:
A.h
上午
B.h
文学硕士
重要编辑:
请注意,这里和那里的方法都会发生这种情况。例如,我有一些其他的方法,比如printThat等,它们工作时没有错误。我不知道发生了什么事 您需要在协议中定义-打印此
,并制作一个实现此协议的脚本。您还需要将代理标记为符合此代理
i、 e:
@协议打印机
-(作废)打印本;
@结束
@接口A:NSObject
//...
@结束
@接口B://。。。
@属性(非原子,弱)id委托;
@结束
ARC需要了解方法调用的接口,以便正确管理内存。如果没有定义,它就会抱怨。我的问题是,这与启用ARC有什么关系?它在iOS 4.x和iOS 5.0上都能正常工作,在ARC关闭的情况下也能正常工作。这是一个编译器错误:修复所有编译器错误和警告。好的,等等。我在接口a中有一个方法声明:-(void)printThis;发布您的界面(相关位)我已经更新了我的答案,将代理标记为id
,而不仅仅是id
。好奇的是,如果您通过delegate
的getter而不是直接访问ivar,您是否仍然存在ARC on的问题?无论哪种方式,遵循协议都是更好的设计。
@class B;
@interface A: blah blah
{
B objB;
}
-(void) printThis;
objB = [[B alloc] init];
objB.delegate = self;
- (void)printThis {
//doSomething
}
@interface B: blah blah
{
//id delegate; //used to be there, now I just property & synthesize
}
@property (nonatomic,weak) id delegate;
@synthesize delegate;
[delegate printThis]; //error with ARC ON, works with OFF
@protocol Printer <NSObject>
- (void)printThis;
@end
@interface A : NSObject <Printer>
//...
@end
@interface B : //...
@property (nonatomic, weak) id<Printer> delegate;
@end