将NSObject设置为nil会挂起我的应用程序

时间:2014-06-27 21:50:07

标签: ios multipeer-connectivity

当用户按下取消按钮时,我试图从一个视图控制器转换到另一个视图控制器。在我调用dismissViewController之前,我将另一个对象设置为nil。

此对象是控制多重连接和与之关联的状态的管理器。当我将其设置为nil时:_appDelegate.manager = nil;该应用程序会挂起约5秒钟,然后再次运行。我使用了探查器,在cpu或内存中没有发生任何事情。我真的很困惑。是否有可能与multipeer使用其他线程有关?

如果有帮助,这是ConnectionManager的头文件。

@interface ConnectionManager : NSObject <MCSessionDelegate, MCNearbyServiceBrowserDelegate, MCNearbyServiceAdvertiserDelegate>

@property (nonatomic, strong) MCPeerID *peerID;
@property (nonatomic, strong) MCNearbyServiceBrowser *browser;
@property (nonatomic, strong) MCNearbyServiceAdvertiser *advertiser; 
@property (nonatomic, strong) MCSession *session;
@property (nonatomic, strong) NSMutableDictionary *sessions;
@property (nonatomic, assign) BOOL leader;
@property (nonatomic, strong) NSMutableArray *currentRequestingPeers;
@property (nonatomic, strong) NSMutableDictionary *allMessages;
@property (nonatomic, strong) NSString *userID;
@property (nonatomic, strong) NSData *leadersPublicKey;
@property (nonatomic, strong) NSString *password;
@property (nonatomic, strong) NSString *nameOfProtest;
@property (nonatomic, strong) NSMutableDictionary *foundProtests;

- (void)joinProtest:(NSString*)protestName password:(NSString*)password;
- (void)startProtest:(NSString*)name password:(NSString*)password;
- (void)pruneTree;
- (void)sendMessage:(NSString*)message;
- (void)searchForProtests;
- (void)reset;
- (void)testMessageSending;

@end

2 个答案:

答案 0 :(得分:1)

这是一般调试提示(作为答案发布,因为它不作为评论工作)。

我的猜测是关机程序的某些部分正在等待来自网络的响应,并且缺少响应,在5秒后超时。如果您很幸运,您的代码的某些部分将被涉及,您将认识到等待网络事件。

要找到答案,请使用调试器运行应用程序。当应用程序挂起时,请按暂停按钮。然后打开Debug导航器,检查每个线程的状态。具体来说,单击每行用户代码(带蓝色图标),看看你的代码在每个线程中做了什么。

enter image description here

答案 1 :(得分:1)

我没有与多路连接断开连接。在销毁会话之前,您必须致电[session disconnect]