zoukankan      html  css  js  c++  java
  • object-c计划tips-添加到类对象属性

    这个问题从网络包的内容,由于保密问题,我刚才所描述我的业余的想法。


    基本的想法:

    网络请求,我们应该能够使用基类BaseNetWork, 然后由派生类继承BaseNetWork,并实现一些特殊的方法。

    一般标准的流程是传入block, 当网络请求完成后。通过block回调回来。这里叙述的关键不是怎样实现一个网络请求和回调block的相关内容,而是怎样取消请求。 一般基类会实现一个cancelNetWork方法。它依据自己的url进行cancel操作。 


    举例:

    我们使用 DerivedNetWork* net = [DerivedNetWork alloc]init]; 在init方法中设置了自身的url。然后调用基类的sendRequest发送请求。 等待网络返回的回调。 假设须要取消请求,难道我们使用[net CancelNetWork];,这样肯定不好。

    毕竟在其它的方法里面不能得到当前的net指针,保存成成员又没有必要。 于是大家会想到应该使用类名进行cancel操作。 即将cancelNetWork定义成类方法。而不是对象方法。

    这就引入了一个新的问题, 类方法怎样获取到对象的url? 经过苦思冥想,有一天发现了objc_setAssociatedObject方法。又联想到类对象本身也是对象的思路,想到一个解决方式。


    方案:

    基类NetWork类的实现代码:

    #define LSPerson_URL_Key @"LSPerson_URL_Key"
    
    @implementation BaseNetWork
    
    -(void)setUrl:(NSString *)url
    {
        objc_setAssociatedObject([self class], LSPerson_URL_Key, url, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }
    +(void)cancelRequest
    {
        NSString* url =  objc_getAssociatedObject([self class], LSPerson_URL_Key);
        NSLog(@"cancelRequestUrl:%@", url);
    }
    @end
    上面基类有一个setUrl方法,供派生类的对象使用设置自身的url, 它将url绑定到self class的类对象上。 然后另一个cancelRequest类方法。它从当前类对象中读取到url,来进行真正的cancel操作。 通过这样的方式。派生类能够使用此类方法进行自由的取消请求操作了。

    代码:

    LPStudyRequest* lpReq = [[LPStudyRequest alloc]init];
    lpReq.url = @"http://jiawei.com";
    
    //能够看到日志的输出。不同的派生类能够得到不同的url。再使用此url传递给AF进行取消操作。

    [LPStudyRequest cancelRequest];



    总结:

    上面是一个主要的给类加入变量的思想。 它在这个取消网络请求里面得到了非常好的应用。 我还将它用到防止自身提前释放, 仿C++的静态变量中。

    请一定要注意: C++的静态变量和object-c里面用到的单例static是不一样的。 一个是属于类的静态变量,一个是属于全局程序的静态变量。 假设基类定义了静态变量。派生类继承的话, C++的派生类会非常好的继承下来。 OC的全部的派生类对象公有的是同一个内存款, 它可以考虑使用类对象,势必模拟这种情况。


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    线程内唯一对象HttpContext
    asp.net MVC 路由机制
    asp.net MVC 路由机制 Route
    asp.net MVC 路由系统
    asp.net中的路由系统
    Nodejs 高并发长链接TCP链接的服务器设计问题
    关于SharePoint 2010中不能使用AjaxControlToolkit的解决办法
    百度编辑器批量上传图片自动排版
    phpcms后台部分修改
    PHP导入excel发送网易云信短信
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4615078.html
Copyright © 2011-2022 走看看