• ObjectiveC out of scope问题


    Objective-C有个很脑残的问题

    描述如下:

    ASIFormRequest类是ASIHTTPRequest类的子类。在函数中,对另一地方返回的ASIFormRequest指针进行retain,出了这个函数,retain的指针可以访问,但是所有从父类继承的属性、方法,都out of scope,一使用就程序崩溃。

    解决办法很简单,retain时不要retain子类指针,retain父类的指针既可。

    -(ASIHTTPRequest *) _getSinaRequest{
        ASIHTTPRequest 
    *request = [sinaApi uploadWithImage:selectedPhoto status:text.text];
        request.
    delegate = self;
        request.showAccurateProgress 
    = YES;
        request.uploadProgressDelegate 
    = sinaPostProgress;
        [request retain];
        
    return request;
    }
    - (void)uploadPhoto
    {
        
    if ([sinaApi isAuthorized]) {
            sinaPosted 
    = NO;
            sinaPostRequest 
    = [self _getSinaRequest];
            [sinaPostRequest startAsynchronous];
        }
        
    else {
            sinaPosted 
    = YES;
        }
            
    //... ...

    }

    - (void)cancel: (id)sender{

        
    if(sinaPostRequest){
            
    if(![sinaPostRequest isFinished]){ // 如果retain的是ASIFormRequest指针,这里马上死掉
                [sinaPostRequest clearDelegatesAndCancel];
            }
            [sinaPostRequest release];
        }
        sinaPostRequest 
    = nil;
        [progressWindow hideImmediately];

    }
  • 相关阅读:
    【Java】RuleSource约束常用方法整理
    【Oracle】多次提交造成性能慢及处理方法
    【Oracle】ORA-28000: the account is locked-的解决办法
    【Eclipse】几个最重要的快捷键
    JavaScript 垃圾回收总结
    JavaScript 执行环境(作用域)总结
    JavaScript基本数据类型
    全局 Ajax 事件处理器
    require.js 模块化
    配置apache反向代理进行跨域
  • 原文地址:https://www.cnblogs.com/think/p/OutOfScopeWhereInherited.html
Copyright © 2020-2023  润新知