ios开发碎记录
ios开发碎知识点
前言.
整理好久的了,最近很少开发ios了,再不发估计ios就废了
😋ios日常开发中,有必要记录一下零碎的知识点,在此,也记录一下,开放出来,慢慢完善,期待您的反馈。
1 调用系统相机,文字语言类型设置
capture.png2 界面卡顿,防止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];