ios - uiviewcontroller dealloc时如何在 objective-c 中触发 block 事件

标签 ios objective-c objective-c-blocks

当 UIViewController dealloc 时,如何在 Objective C 中触发 block 事件。

例如:

   [PGMemberObj requestWithUserName:@"ab" andPassword:@"cc" andCallback:^(BOOL isSuc){
        if (isSuc) {
            NSLog("Login Suc.");
        }else
        {
            NSLog("Login Failed");
        }
    }];

当我弹出 ViewController 并执行 dealloc 时,我仍然收到 Login Suc。或登录失败消息。 如何避免这个问题?

最佳答案

试试下面的代码:

__weak UIViewController *weakSelf = self;
[PGMemberObj requestWithUserName:@"ab" andPassword:@"cc" andCallback:^(BOOL isSuc){
    if ([weakSelf isViewLoaded] && [weakSelf.view window]) 
        //The view controller still exists AND it's being shown on screen
    else
        //Either dealloc'd or not on screen anymore
 }];

它将测试您的 View Controller 是否仍然存在并且仍在屏幕上。 如果您不关心它是否仍在屏幕上显示,只需检查 weakSelf

if (weakSelf)
    //Still exists
else
    //dealloc'd

关于ios - uiviewcontroller dealloc时如何在 objective-c 中触发 block 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19512400/

相关文章:

javascript - 在 Xcode Instruments 中,如何导入 UIAutomation 脚本?

objective-c - 如何定义一个类别,将方法添加到实现特定协议(protocol)的类中?

ios - Objective C 到 Swift - DoWithBlock

ios - 理解 block (用推特登录)

ios - 在 SwiftUI 中为圆角矩形创建均匀分布的虚线轮廓

ios - 可续订和支持

objective-c - 如何为 iOS 创建二维码阅读器

iphone - 检测 modalView 来自某个 UIViewController

iphone - 使用递归 block 时的 EXC_BAD_ACCESS

ios - 如何用其他方法识别通过蓝牙扫描的设备