ios開發(fā)碎知識點(diǎn)
前言.
整理好久的了,最近很少開發(fā)ios了,再不發(fā)估計(jì)ios就廢了
??ios日常開發(fā)中,有必要記錄一下零碎的知識點(diǎn),在此,也記錄一下,開放出來,慢慢完善,期待您的反饋。
1 調(diào)用系統(tǒng)相機(jī),文字語言類型設(shè)置

2 界面卡頓,防止vc被push多次
自定義導(dǎo)航欄控制器
//FIXME:這樣做防止主界面卡頓時(shí),導(dǎo)致一個(gè)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 數(shù)組拷貝 & 字符串拷貝的區(qū)別
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];
問題:
為什么當(dāng)array內(nèi)的內(nèi)容是數(shù)組的時(shí)候,mutableCopyArray 和 array的內(nèi)容一起改變,但是array的內(nèi)容是字符串的時(shí)候,內(nèi)容是單獨(dú)改變的
答:
因?yàn)樽址@種對象比較特殊,oc把字符串存在常量內(nèi)存區(qū)域,意味著內(nèi)容相同的字符串,內(nèi)存地址都是相同的,你可以試試,即使copy也沒用。
所以,當(dāng)你改了一個(gè)array中的字符串元素,實(shí)際上并不是改變改指針下的字符串值,而是改變了容器這個(gè)元素的指針
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方法關(guān)聯(lián)的對象,需要在主對象dealloc的時(shí)候釋放么
assign和weak的區(qū)別在于weak能再修飾對象釋放時(shí)自動(dòng)將指針置空,assign不會(huì),那用OBJC_ASSOCIATION_ASSIGN修飾的對象是屬于weak和還是assign
如何手動(dòng)實(shí)現(xiàn)weak屬性的方式,大概實(shí)現(xiàn)是通過associate一個(gè)中間變量,在這個(gè)變量dealloc的時(shí)候?qū)?weak指針 置空。如果這種方式是正確的話,那是不是說 OBJC_ASSOCIATION_ASSIGN 修飾的assiciate對象 在主對象dealloc的時(shí)候需要講它的指針置空呢
OBJC_ASSOCIATION_ASSIGN 還真的必須配合手動(dòng) 設(shè)置 nil 使用,要不在屬性施放后,調(diào)用會(huì)exc_bad
6 導(dǎo)航棧中控制器的’復(fù)用‘異常
[a, b, c] > push A 新實(shí)例 a1 > [a, b, c, a1]
Pushing the same view controller instance more than once is not supported
不允許:不支持壓棧相同控制器實(shí)例
[a, b, c] 導(dǎo)航數(shù)組操作將a實(shí)例再添加到導(dǎo)航數(shù)組 > [a, b, c, a]
All view controllers in a navigation controller must be distinct
不允許:導(dǎo)航控制器中的子控制器必須是唯一的
7 顯示html格式文本 并修改默認(rèn)的藍(lán)色和下劃線
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithData:[contentStr dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];