子控件的x始終與保持父控件寬度一半保持一致:
使用拖拽約束的方法乓土,動(dòng)態(tài)改變約束;
使用masonry痒蓬,
make.left.equalTo(superView).with.offset(superView.frame.size.width * 0.2);
MacOS 10.12安全與隱私?jīng)]有允許任何來源的app選項(xiàng)解決辦法
MacOS 10.12之后系統(tǒng)偏好設(shè)置-安全&隱私下面去除了允許安裝任何來源舀患,導(dǎo)致很多軟件運(yùn)行不了,解決方法:打開終端察蹲,輸入以下命令
sudo spctl --master-disable
枚舉enum 建議使用 NS_ENUM 和 NS_OPTIONS 宏來定義枚舉類型
數(shù)據(jù)類型的正確使用
int -> NSInteger
unsigned -> NSUInteger
float -> CGFloat
動(dòng)畫時(shí)間 -> NSTimeInterval
- 無論是 MVC 模式還是 MVVM 模式,業(yè)務(wù)邏輯都不應(yīng)當(dāng)寫在 Model 里:MVC 應(yīng)在 C催训,MVVM 應(yīng)在 VM洽议。
- 由于字符串值可能會(huì)改變,所以要把字符串相關(guān)屬性的“內(nèi)存管理語義”聲明為 copy 漫拭。
- 禁止默認(rèn)的手勢(shì)滑動(dòng)返回
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
//屏蔽右滑返回手勢(shì)
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
- 字符串UTF-8解碼編碼
iOS中對(duì)字符串進(jìn)行UTF-8編碼:輸出str字符串的UTF-8格式
[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
解碼:把str字符串以UTF-8規(guī)則進(jìn)行解碼
[str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
- UIWebView
// 清除cookies
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]) { [storage deleteCookie:cookie];}
// 清除UIWebView的緩存
[[NSURLCachesharedURLCache] removeAllCachedResponses];
- null的處理
[string isKindOfClass:[NSNull class]];
數(shù)組不允許是nil亚兄,其他情況例如setText:可以是nil
null都不允許,可以用上面的方法排除采驻; - arc環(huán)境下編譯非arc
-fno-objc-arc - 隨機(jī)數(shù):
arc4random( ) 會(huì)生成任意正整數(shù)和0
arc4random_uniform(100) 會(huì)生成0~99的整數(shù) (包括0和99,但是沒有100) - 打電話
三種方式:
1>@“tel://10010”; openURL,缺點(diǎn)但是不會(huì)回到應(yīng)用
2>@“telprompt://10010”; openURL,缺點(diǎn)是私有API,所以可能不會(huì)被審核通過
3>添加webView loadRequest,要注意其中webview沒有frame - 發(fā)短信
1>@“sms://10010” openURL
2>#import<MessageUI/MessageUI.h]] > - 發(fā)郵件
1>@“mailto://10010@qq.com” openURL
2>控制器 - 為應(yīng)用評(píng)分
注意一定要有Apple ID
NSString*appid =@"725296055";
NSString*str = [NSStringstringWithFormat:@"itms-apps://itunes.apple.com/cn/app/id%@?mt=8", appid];
// 或者也可以寫http://
NSURL*url = [NSURL URLWithString:str];
[[UIApplicationsharedApplication]openURL:url];
- 對(duì)數(shù)組中每一個(gè)對(duì)象都執(zhí)行同樣的操作有兩種方法:
一種是遍歷數(shù)組,拿到所有的對(duì)象,進(jìn)行操作;
還有一種是[array makeObjectsPerformSelector:@selsetor() withObject:…];
- 計(jì)時(shí)器的方法,如果刷新的比較慢,通常是NSTimer,但是如果在很短的時(shí)間里面調(diào)用很多次方法,用CADisplayLink,一秒內(nèi)刷新60次
// 新建定時(shí)器
CADisplayLink*link = [CADisplayLinkdisplayLinkWithTarget:self selector:@selector(update)];
[link addToRunLoop: [NSRunLoop mainRunLoop]forMode:NSDefaultRunLoopMode];
self.link= link;
// CADisplayLink 作為成員變量的時(shí)候?qū)傩詤?shù)strong
// 取消定時(shí)器:
[self.link invalidate];
self.link=nil;
- 顯示/隱藏Mac隱藏文件命令如下:
顯示Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true
隱藏Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false
- Tabbar的默認(rèn)高度是49
//設(shè)定Tabbar的點(diǎn)擊后的顏色
[[UITabBar appearance] setTintColor:[UIColor redColor]];
//設(shè)定Tabbar的顏色
[[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];
- 自定義了leftBarbuttonItem左滑返回手勢(shì)失效了怎么辦
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:img style:UIBarButtonItemStylePlain target:self action:@selector(onBack:)];
self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
- ScrollView莫名其妙不能在viewController劃到頂怎么辦
self.automaticallyAdjustsScrollViewInsets = YES;
- 如果要使用靜態(tài)單元格审胚,則需要storyboard的UITableViewController
- 根據(jù)URL創(chuàng)建 NSURLRequest 請(qǐng)求
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];
//參數(shù)cachePolicy表示緩存策略,枚舉類型,值有以下幾種:
NSURLRequestUseProtocolCachePolicy = 0 NSURLRequest默認(rèn)的cache policy匈勋,使用Protocol協(xié)議定義。是最能保持一致性的協(xié)議膳叨。
NSURLRequestReloadIgnoringCacheData = 1 忽略緩存直接從原始地址下載
NSURLRequestReturnCacheDataElseLoad = 2 只有在cache中不存在data時(shí)才從原始地址下載
NSURLRequestReturnCacheDataDontLoad = 3 只使用cache數(shù)據(jù)洽洁,如果不存在cache,請(qǐng)求失敗;次策略用于沒有建立網(wǎng)絡(luò)連接離線模式;
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, 忽略本地和遠(yuǎn)程的緩存數(shù)據(jù)菲嘴,直接從原始地址下載饿自,與NSURLRequestReloadIgnoringCacheData類似。
NSURLRequestReloadRevalidatingCacheData = 5 驗(yàn)證本地?cái)?shù)據(jù)與遠(yuǎn)程數(shù)據(jù)是否相同龄坪,如果不同則下載遠(yuǎn)程數(shù)據(jù)昭雌,否則使用本地?cái)?shù)據(jù)。
- 一個(gè)視圖可以有很多個(gè)手勢(shì)悉默,但是一個(gè)手勢(shì)只能添加到一個(gè)視圖,如果需要添加到另一個(gè)視圖中城豁,需要再新建一個(gè)手勢(shì);并且一個(gè)view是可以添加多個(gè)手勢(shì)抄课,但是默認(rèn)只有一個(gè)有效,要使多個(gè)手勢(shì)有效雳旅,要實(shí)現(xiàn)手勢(shì)代理方法跟磨,遵守協(xié)議
<UIGestureRecognizerDelegate>
,并且每個(gè)手勢(shì)都要設(shè)置代理gesture.delegate = self攒盈;
/** * 是否允許多個(gè)手勢(shì)識(shí)別器同時(shí)有效 * Simultaneously : 同時(shí)地 */
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
- 非arc文件和arc文件共存
將非arc文件在arc環(huán)境下共存:
標(biāo)記非arc文件:-fno-objc-arc
將arc文件在非arc環(huán)境下共存:
標(biāo)記arc文件:-f-objc-arc - 隨機(jī)顏色
int r = arc4random_uniform(255+1); // 表示生成0~255的隨機(jī)整數(shù)
UIColor*color = [UIColor colorWithRed:(r)/255.0 green:(r)/255.0 blue:(r)/255.0 alpha:1.0];
- 圖層抖動(dòng)
CAKeyframeAnimation *shake = [CAKeyframeAnimation animation];
shake.keyPath = @“transform.translation.x”
shake.duration = 0.15;
CGFloat delta = 10;
shake.values = @[@0, @( - delta), @0, @(delta)];
shake.repeatCount = 2;
[self.view.layer addAnimation: shake forKey:nil];
-
區(qū)分BundleVersion和BundleShortVersionString
CFBundleVersion
CFBundleShortVersionString - iOS啟動(dòng)和關(guān)閉狀態(tài)欄網(wǎng)絡(luò)請(qǐng)求標(biāo)志
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];// 啟動(dòng)狀態(tài)欄網(wǎng)絡(luò)請(qǐng)求指示
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];// 關(guān)閉狀態(tài)來網(wǎng)絡(luò)請(qǐng)求指示