iOS学习开发iOS Developer

ios开发碎记录

2018-08-17  本文已影响133人  DaZenD

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];

后续。。。

上一篇下一篇

猜你喜欢

热点阅读