ios开发碎记录

作者: DaZenD | 来源:发表于2018-08-17 18:58 被阅读133次

    ios开发碎知识点

    前言.

    整理好久的了,最近很少开发ios了,再不发估计ios就废了

    😋ios日常开发中,有必要记录一下零碎的知识点,在此,也记录一下,开放出来,慢慢完善,期待您的反馈。

    1 调用系统相机,文字语言类型设置

    capture.png

    2 界面卡顿,防止vc被push多次

    自定义导航栏控制器

    //FIXME:这样做防止主界面卡顿时,导致一个ViewController被push多次、

    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
        if (self.childViewControllers.count > 0) {
            if ([[self.childViewControllers lastObject] isKindOfClass:[viewController class]]) {
                return;
            }
        }
        
        [super pushViewController:viewController animated:animated];
    }
    

    3 数组拷贝 & 字符串拷贝的区别

    NSMutableArray *array = [NSMutableArray arrayWithObject:element];
    NSMutableArray *mutableCopyArray = [array mutableCopy];
    [mutableCopyArray[0] addObject:@2];
        
    NSMutableArray *element = [NSMutableArray arrayWithObject:@1];
    NSMutableArray *array = [NSMutableArray arrayWithObject:element];
    NSMutableArray *mutableCopyArray = [array mutableCopy];
    [mutableCopyArray[0] addObject:@2];    
        
    

    问题:
    为什么当array内的内容是数组的时候,mutableCopyArray 和 array的内容一起改变,但是array的内容是字符串的时候,内容是单独改变的

    答:
    因为字符串这种对象比较特殊,oc把字符串存在常量内存区域,意味着内容相同的字符串,内存地址都是相同的,你可以试试,即使copy也没用。

    所以,当你改了一个array中的字符串元素,实际上并不是改变改指针下的字符串值,而是改变了容器这个元素的指针

    4清除缓存和cookie

    /**清除缓存和cookie*/
    - (void)cleanCacheAndCookie{
        //清除cookies
        NSHTTPCookie *cookie;
        NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
        for (cookie in [storage cookies]){
            [storage deleteCookie:cookie];
        }
        //清除UIWebView的缓存
        [[NSURLCache sharedURLCache] removeAllCachedResponses];
        NSURLCache * cache = [NSURLCache sharedURLCache];
        [cache removeAllCachedResponses];
        [cache setDiskCapacity:0];
        [cache setMemoryCapacity:0];
    }
    
    

    5 runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么

    assign和weak的区别在于weak能再修饰对象释放时自动将指针置空,assign不会,那用OBJC_ASSOCIATION_ASSIGN修饰的对象是属于weak和还是assign

    如何手动实现weak属性的方式,大概实现是通过associate一个中间变量,在这个变量dealloc的时候将 weak指针 置空。如果这种方式是正确的话,那是不是说 OBJC_ASSOCIATION_ASSIGN 修饰的assiciate对象 在主对象dealloc的时候需要讲它的指针置空呢

    OBJC_ASSOCIATION_ASSIGN 还真的必须配合手动 设置 nil 使用,要不在属性施放后,调用会exc_bad

    6 导航栈中控制器的’复用‘异常

    [a, b, c] > push A 新实例 a1 > [a, b, c, a1]
    

    Pushing the same view controller instance more than once is not supported
    不允许:不支持压栈相同控制器实例

    [a, b, c] 导航数组操作将a实例再添加到导航数组 > [a, b, c, a]
    

    All view controllers in a navigation controller must be distinct

    不允许:导航控制器中的子控制器必须是唯一的

    7 显示html格式文本 并修改默认的蓝色和下划线

    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithData:[contentStr dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
    

    后续。。。

    相关文章

      网友评论

      • 小五92:作者你好,请问第六点要表达什么意思呀?
        小五92:@DaZenD ok
        DaZenD:开发中小经验,没啥意思,就是导航栈中实例唯一

      本文标题:ios开发碎记录

      本文链接:https://www.haomeiwen.com/subject/flbtiftx.html