zoukankan      html  css  js  c++  java
  • ios 学习札记 细节(四)

    (1)概念:条件变量 linux多线程共享变量时候应用

    (2) 新装的renren sdk总是编译失败,出现原因是xcode版本不对,重新换成新的好了。

    (3) timeoutInterval  已经没有了作用。
    这个问题只有在3.0以及之后的os中才有的,而且只有在当调用了setHTTPBody之后才会出现timeout失效。这个是苹果公司对URL Loading System的在OS3.0中的一个改动,不过在我看来其实这就是一个bug!在setHTTPBody之后,request的timeout会被改为 240s(这个你可以通过NSLog [request timeoutInterval]查看),苹果开发人员的解释就是通常我们自己设置的太短的timeout其实是没什么作用的,尤其对移动设备上来讲与网 络沟通需要的时间往往是比较长的,假如你的timeout是10s,在WWAN的网络环境下,可能才刚刚“bring WWAN Interface up”(不知道怎么翻译,囧)。所以自从OS 3后,如果设置了HTTP body的data,系统就会自动设置一个最低的timeout值,即240s,而且这个值都是不能被改动的,即是你自己再次设置了 timeoutInterval,你通过NSLog [request timeoutInterval]得到的还是240S!!

    解决办法只有自定义一个操作。办法比较笨,但是真的好使(网上找的,感谢wolf_childer,原处:http://hi.baidu.com/wolf_childer/item/250f95c5eefde479ced4f851)

        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:self.address
                                                                                                                     cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                                                                                                             timeoutInterval:self.defaultTimeout];
        NSData *bodyData = [outputBody dataUsingEncoding:NSUTF8StringEncoding];
       
        if(cookies != nil) {
            [request setAllHTTPHeaderFields:[NSHTTPCookie requestHeaderFieldsWithCookies:cookies]];
        }
        [request setValue:@"wsdl2objc" forHTTPHeaderField:@"User-Agent"];
        [request setValue:soapAction forHTTPHeaderField:@"SOAPAction"];
        [request setValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
        [request setValue:[NSString stringWithFormat:@"%u", [bodyData length]] forHTTPHeaderField:@"Content-Length"];
        [request setValue:self.address.host forHTTPHeaderField:@"Host"];
        [request setHTTPMethod: @"POST"];

        [request setHTTPBody: bodyData];
           
        NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:operation];
       
        //自定义时间超时
        [NSTimer scheduledTimerWithTimeInterval:self.defaultTimeout target: self selector: @selector(handleTimer) userInfo:operation repeats:NO];
       
        operation.urlConnection = connection;
       
        [connection release];
    }

    //时间超时定义
    -(void) handleTimer
    {
        [operationCopy connection:[NSError errorWithDomain:@"时间超时!" code:256 userInfo:nil]];
    }

     

    (4)ASIHttpRequest的一个Bug与30秒超时(网摘,主要用于自己记忆)

    今天在项目中发现一个ASIHttpRequest的Bug。这个Bug可能会导致你Http请求延时至少在timeout设置时间结束之后。更可怕的是,为了找出这个Bug,可能会浪费程序员更多的时间。为这个问题我至少奋斗了3个小时!

    项目中一直在使用ASIHttpRequest,但有一次,我发现Http请求居然总是不成功。我下意识地以为这是网络延时问题,我延长了ASIHttpRequest的超时时间至30秒,于是程序不再报错。

    但今天在使用同样的代码时,我发现以前我全错了。这不是超时的问题,而是ASIHttpRequest的一个Bug。

    因为这次我请求本机的Tomcat服务器的某个jsp页面,页面代码写得很简单,在firefox中请求该页面的响应时间不会超过0.01秒,但在iPhone模拟器中居然用了20多秒才返回。这不可能是网络延时的原因。

    当我把超时时间改小至10秒,等待超时时间结束,ASIHttpRequest甚至直接报kCFStreamEventErrorOccurred错误。

    我打开ASIHttpRequest的所有调试日志,发现ASIHttpRequest似乎在尝试用上次的连接去连接服务器:

    Request #3 will use connection #2

    Request attempted to use connection #2, but it has been closed -will retry with a new connection

    Request #3 will use connection #3

    它好像连接时重用上次的http连接。这样肯定是不行的,因为上次的http请求结束后服务器已经把连接关闭了。

    于是我们只能把ASIHttpRequest的连接重用关闭:

    [requestsetShouldAttemptPersistentConnection:NO];

    这样,前面的问题就不会出现了。其实,在不同的http会话中,不应该开启PersistentConnection。

     (5).关于oc的内存释放问题

    self.obj 是对属性进行操作,而obj是对指针进行操作。

    例子:

    self.userTextField = nil;//相当于两句:[userTextField relase]; userTextField = nil;

     userTextField = nil; //只相当于一句: userTextField = nil;

    因此,我们在使用的时候,可以使用:self.userTextField = nil;或者:[userTextField release];userTextField = nil;

    (6)delloc中,要先释放继承类的内容,再调用[super delloc];

    (7)添加和删除图片资源:将要删除的图片直接从文件夹中(show in findler)删掉,然后再删掉bundle,再在相应的文件夹中增加图片,将bundle再拖到工程里面

  • 相关阅读:
    reverse的一些做题教训&&trick
    reverse的一些常用资料
    [攻防世界
    JavaScript 常用函数 通用函数
    宝塔突然出现Internal Server Error
    centos7上用nginx部署前后端分离项目
    postgres 如何把多行数据,合并一行,返回json字符串
    文艺平衡树
    FHQ Treap 板子
    Java后台开发有哪些提升效率的插件?
  • 原文地址:https://www.cnblogs.com/Peterahan/p/2670791.html
Copyright © 2011-2022 走看看