Bou*_*rne 4 iphone objective-c ios automatic-ref-counting
这是我的情景.我有一个类A.在它的实现中我创建了类型B的对象并将B的委托设置为self(所以B.delegate = self在A类的实现中的某个地方).
A类有一个实例方法 - (void)printThis;
现在在B的实现中,当我尝试做的时候[delegate printThis];,它给了我这个错误:"没有已知的选择器print的实例方法这个"
当然,这是我启用ARC的时候.上面的委托模式曾经在没有ARC的iOS 4.x中正常工作.当我关掉ARC时它仍然会这样做.ARC与将消息传递给代表有什么关系?
骨架代码:
啊
@class B;
@interface A: blah blah
{
B objB;
}
-(void) printThis;
Run Code Online (Sandbox Code Playgroud)
上午
objB = [[B alloc] init];
objB.delegate = self;
- (void)printThis {
//doSomething
}
Run Code Online (Sandbox Code Playgroud)
BH
@interface B: blah blah
{
//id delegate; //used to be there, now I just property & synthesize
}
@property (nonatomic,weak) id delegate;
Run Code Online (Sandbox Code Playgroud)
BM
@synthesize delegate;
[delegate printThis]; //error with ARC ON, works with OFF
Run Code Online (Sandbox Code Playgroud)
重要编辑:
请注意,这种情况会发生在这里和那里.例如,我在A中有一些其他方法,如printThat等,它们可以正常工作.我对发生的事情毫无头绪!
您需要-printThis在协议中定义并使A实现此协议.您还需要将委托标记为符合此委托.
即:
@protocol Printer <NSObject>
- (void)printThis;
@end
@interface A : NSObject <Printer>
//...
@end
@interface B : //...
@property (nonatomic, weak) id<Printer> delegate;
@end
Run Code Online (Sandbox Code Playgroud)
ARC需要了解方法调用的接口才能正确管理内存.如果没有定义,那么它会抱怨.
| 归档时间: |
|
| 查看次数: |
1715 次 |
| 最近记录: |