我有一个问题(与这个SO 问题有关)。但根本问题与我最初想象的不同,我需要将其作为一个新问题发布;但我会更新上一个问题以引用这个问题 - 如果有人能够提供帮助。
我有UINavigationController
一个vcA
作为rootViewController
. vcB
然后被推入导航堆栈。vcB
有一个子视图,它是一个UIView
子类(调用它BSView
),上面有一些按钮。我需要vcB
知道何时BSView
点击按钮,所以我实现了@protocol
如下BBView.h
所示:
@protocol BBViewDelegate <NSObject>
@optional
-(void)buttonAPressed;
-(void)buttonBPressed;
-(void)buttonCPressed;
@end
@interface BBView : UIView {
id<BBViewDelegate> _delegate;
NSString *_title;
}
- (id)initWithFrame:(CGRect)frame withTitle:(NSString *)title
andDelegate:(id<BBViewDelegate>)delegate;
@end
BBView.m
init 方法如下所示:
- (id)initWithFrame:(CGRect)frame withTitle:(NSString *)title
andDelegate:(id<BBViewDelegate>)delegate
{
self = [super initWithFrame:frame];
if (self) {
_delegate = delegate;
_title = title;
}
return self;
}
delegate
会在哪里vcB
。按下时buttonA
,会触发以下代码:
if(_delegate && [_delegate respondsToSelector:@selector(buttonAPressed)]) {
[_delegate buttonAPressed];
}
这似乎工作正常。所有方法都按预期调用。这是问题所在。当我将 vcB 弹回 vcA 时,vcB 永远不会被释放。如果 vcB 再次被推送,那么内存只会循环上升。我可以重复这个循环,直到应用程序爆炸。
当我不BBView
使用任何委托变量(或nil
值)进行初始化时,vcB
内存会在导航弹出时释放。但是当然,vcB
永远不会意识到按钮的点击。
有谁知道会发生什么???我已经搞砸了很长时间,我根本不知道如何vcB
作为对象传入BBView
并在导航弹回时释放它vcA
。
任何指针都是最有帮助的。