1、統(tǒng)一收鍵盤的方法

華坪網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
2、提示框
BBAlertView *alert = [[BBAlertView alloc] initWithStyle:BBAlertViewStyleDefault
Title:@"刪除訂單"
message:@"是否刪除訂單,"
customView:nil
delegate:self
cancelButtonTitle:L(@"取消")
otherButtonTitles:L(@"確認")];
[alert setCancelBlock:^{
}];
[alert setConfirmBlock:^{
[self orderDidRemovePressDown:tempDic Index:index.section];
}];
[alert show];
3、圖片的自適應(yīng)功能
self.brandImage.contentMode = UIViewContentModeScaleAspectFit;
4、cocoaPods清除緩存問題
$ sudo rm -fr ~/.cocoapods/repos/master
$ pod setup
5、設(shè)置顯示鍵盤的樣式
textView.keyboardType =UIKeyboardTypeDefault;
//設(shè)置鍵盤右下角為完成(中文輸入法下)
textView.returnKeyType=UIReturnKeyDone;
6、輸出當(dāng)前時間
NSDateFormatter * dateFormatter=[[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"];
NSLog(@"當(dāng)前毫秒時間1==%@",[dateFormatter stringFromDate:[NSDate date]]);
7、顯示兩秒然后消失
UILabel * lab=[[UILabel alloc]initWithFrame:CGRectMake(60,Main_Screen_Height-64-49-60, Main_Screen_Width-120, 50)];
lab.backgroundColor=[UIColor grayColor];
ViewRadius(lab, 20);
lab.textAlignment=NSTextAlignmentCenter;
lab.text=@"請先進行實名制驗證";
[self.view addSubview:lab];
[UILabel animateWithDuration:2 animations:^{
lab.alpha=0;
}completion:^(BOOL finished) {
[lab removeFromSuperview];
}];
8、設(shè)置placeholder屬性的大小和顏色
[_phoneFie setValue:[UIColor grayColor] forKeyPath:@"_placeholderLabel.textColor"];
[_phoneFie setValue:[UIFont boldSystemFontOfSize:15] forKeyPath:@"_placeholderLabel.font"];
_phoneFie.returnKeyType=UIReturnKeyDone;
9、設(shè)置cell的交互完全不可以使用
//[cellTwo setUserInteractionEnabled:NO];
//設(shè)置cell不可以點擊,但是上面的子控件可以交互
cellTwo.selectionStyle=UITableViewCellSelectionStyleNone;
10、將textField的placeholder 屬性的字體向右邊移動5
_field.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10*Width_375, _field.frame.size.height)];
_field.leftViewMode = UITextFieldViewModeAlways;
11、開新線程使按鈕上的時間變化
-(void)startTime{
__block int timeout=60; //倒計時時間
UIButton * btn=(UIButton *)[self.view viewWithTag:1000];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒執(zhí)行
dispatch_source_set_event_handler(_timer, ^{
if(timeout=0){
dispatch_source_cancel(_timer);
dispatch_async(dispatch_get_main_queue(), ^{
[btn setTitle:@"發(fā)送驗證碼" forState:UIControlStateNormal];
btn.enabled = YES;
});
}else{
//? int minutes = timeout / 60;
int miao = timeout % 60;
if (miao==0) {
miao = 60;
}
NSString *strTime = [NSString stringWithFormat:@"%.2d", miao];
dispatch_async(dispatch_get_main_queue(), ^{
[btn setTitle:[NSString stringWithFormat:@"剩余%@秒",strTime] forState:UIControlStateNormal];
btn.enabled = NO;
});
timeout--;
}
});
dispatch_resume(_timer);
}
12、隱藏TableView 中多余的行
UIView * view=[[UIView alloc]initWithFrame:CGRectZero];
[_tabelView setTableFooterView:view];
13、UIView添加背景圖片
UIImage * image=[UIImage imageNamed:@"friend750"];
headSeV.layer.contents=(id)image.CGImage;
14、UITableView取消選中狀態(tài)
[tableView deselectRowAtIndexPath:indexPath animated:YES];// 取消選中
15、帶屬性的字符串
NSFontAttributeName? 字體
NSParagraphStyleAttributeName? 段落格式
NSForegroundColorAttributeName? 字體顏色
NSBackgroundColorAttributeName? 背景顏色
NSStrikethroughStyleAttributeName 刪除線格式
NSUnderlineStyleAttributeName? ? ? 下劃線格式
NSStrokeColorAttributeName? ? ? ? 刪除線顏色
NSStrokeWidthAttributeName 刪除線寬度
NSShadowAttributeName? 陰影
1.? 使用實例
UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)];
testLabel.backgroundColor = [UIColor lightGrayColor];
testLabel.textAlignment = NSTextAlignmentCenter;
NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"今天天氣不錯呀"];
[AttributedStr addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:16.0]
range:NSMakeRange(2, 2)];
[AttributedStr addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(2, 2)];
testLabel.attributedText = AttributedStr;
[self.view addSubview:testLabel];
16、加大按鈕的點擊范圍
把UIButton的frame 設(shè)置的大一些,然后給UIButton設(shè)置一個小些的圖片
[tmpBtn setImageEdgeInsets:UIEdgeInsetsMake(5, 5, 5, 5)];
// 注意這里不能用setBackgroundImage
[tmpBtn setImage:[UIImage imageNamed:@"testBtnImage"] forState:UIControlStateNormal];
17、//避免self的強引用
__weak ViewController *weakSelf = self;
18、//類別的創(chuàng)建
command +n ——Objective-C File———(File Type? 選擇是類別還是擴展)———(Class? 選擇為哪個控件寫類別)
19、修改UITableview 滾動條顏色的方法
self.tableView.indicatorStyle=UIScrollViewIndicatorStyleWhite;
20、利用UIWebView顯示pdf文件
webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
[webView setDelegate:self];
[webView setScalesPageToFit:YES];
[webViewsetAutoresizingMask:UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight];
[webView setAllowsInlineMediaPlayback:YES];
[self.view addSubview:webView];
NSString *pdfPath = [[NSBundle mainBundle]pathForResource:@"ojc" ofType:@"pdf"];
NSURL *url = [NSURLfileURLWithPath:pdfPath];
NSURLRequest *request = [NSURLRequestrequestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:5];
[webView loadRequest:request];
21、將plist文件中的數(shù)據(jù)賦給數(shù)組
NSString *thePath = [[NSBundle mainBundle]pathForResource:@"States" ofType:@"plist"];
NSArray *array = [NSArrayarrayWithContentsOfFile:thePath];
22、隱藏狀態(tài)欄
[[UIApplication shareApplication]setStatusBarHidden: YES animated:NO];
23、給navigation? Bar? 設(shè)置title顏色
UIColor *whiteColor = [UIColor whiteColor];
NSDictionary *dic = [NSDictionary dictionaryWithObject:whiteColor forKey:NSForegroundColorAttributeName];
[self.navigationController.navigationBar setTitleTextAttributes:dic];
24、使用AirDrop 進行分享
NSArray *array = @[@"test1", @"test2"];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:array applicationActivities:nil];
[self presentViewController:activityVC animated:YES
completion:^{
NSLog(@"Air");
}];
25、把tableview里面Cell的小對勾的顏色改成別的顏色
_mTableView.tintColor = [UIColor redColor];
26、UITableView去掉分割線
_tableView.separatorStyle = NO;
27、正則判斷手機號碼地址格式
- (BOOL)isMobileNumber:(NSString *)mobileNum {
//? ? 電信號段:133/153/180/181/189/177
//? ? 聯(lián)通號段:130/131/132/155/156/185/186/145/176
//? ? 移動號段:134/135/136/137/138/139/150/151/152/157/158/159/182/183/184/187/188/147/178
//? ? 虛擬運營商:170
NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[06-8])\\d{8}$";
NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
return [regextestmobile evaluateWithObject:mobileNum];
}
28、控制交易密碼位數(shù)
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if (textField.text.length =6){
[MBProgressHUD showMessage:@"密碼為6位" afterDelay:1.8];
return NO;
}
return YES;
}
29、判斷是不是空
if ([real_name isKindOfClass:[NSNull class]] ) {
return NO;}
30、點擊號碼撥打電話
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://400966220"]];
31、控制UITabbar的選擇哪一個
[self.tabBarController setSelectedIndex:1];
32、獲取當(dāng)前App的版本號
NSDictionary?*infoDictionary?=?[[NSBundle?mainBundle]?infoDictionary];
CFShow(infoDictionary);
//?app名稱
NSString?*app_Name?=?[infoDictionary?objectForKey:@"CFBundleDisplayName"];
//?app版本
NSString?*app_Version?=?[infoDictionary?objectForKey:@"CFBundleShortVersionString"];
//?app?build版本
NSString?*app_build?=?[infoDictionary?objectForKey:@"CFBundleVersion"];
33、蘋果app權(quán)限NSPhotoLibraryUsageDescriptionApp需要您的同意,才能訪問相冊NSCameraUsageDescriptionApp需要您的同意,才能訪問相機NSMicrophoneUsageDescriptionApp需要您的同意,才能訪問麥克風(fēng)NSLocationUsageDescriptionApp需要您的同意,才能訪問位置NSLocationWhenInUseUsageDescriptionApp需要您的同意,才能在使用期間訪問位置NSLocationAlwaysUsageDescriptionApp需要您的同意,才能始終訪問位置NSCalendarsUsageDescriptionApp需要您的同意,才能訪問日歷NSRemindersUsageDescriptionApp需要您的同意,才能訪問提醒事項NSMotionUsageDescriptionApp需要您的同意,才能訪問運動與健身NSHealthUpdateUsageDescriptionApp需要您的同意,才能訪問健康更新NSHealthShareUsageDescriptionApp需要您的同意,才能訪問健康分享NSBluetoothPeripheralUsageDescriptionApp需要您的同意,才能訪問藍牙NSAppleMusicUsageDescriptionApp需要您的同意,才能訪問媒體資料庫
34、控件設(shè)置邊框
_describText.layer.borderColor = [[UIColor colorWithRed:215.0 / 255.0 green:215.0 / 255.0 blue:215.0 / 255.0 alpha:1] CGColor];
_describText.layer.borderWidth = 1.0;
_describText.layer.cornerRadius = 4.0;
_describText.clipsToBounds = YES;
35、//隱藏電池條的方法
-(BOOL)prefersStatusBarHidden{
return YES;
}
36、延時操作
[NSThread sleepForTimeInterval:2];
方法二:
[self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.5];
37、系統(tǒng)風(fēng)火輪:
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; //隱藏
38、//didSelectRowAtIndexPath:方法里面找到當(dāng)前的Cell
AssessMentCell * cell = [tableView cellForRowAtIndexPath:indexPath];
39、navigation上返回按鈕的顏色以及返回按鈕后面文字去掉
//返回按鈕后邊文字去掉
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)
forBarMetrics:UIBarMetricsDefault];
//設(shè)置左上角返回按鈕的顏色
self.navigationController.navigationBar.tintColor = UIColorFromRGB(0x666666);
40、lineBreakMode //設(shè)置文字過長時的顯示格式
label.lineBreakMode = NSLineBreakByCharWrapping;以字符為顯示單位顯
示,后面部分省略不顯示。
label.lineBreakMode = NSLineBreakByClipping;剪切與文本寬度相同的內(nèi)
容長度,后半部分被刪除。
label.lineBreakMode = NSLineBreakByTruncatingHead;前面部分文字
以……方式省略,顯示尾部文字內(nèi)容。
label.lineBreakMode = NSLineBreakByTruncatingMiddle;中間的內(nèi)容
以……方式省略,顯示頭尾的文字內(nèi)容。
label.lineBreakMode = NSLineBreakByTruncatingTail;結(jié)尾部分的內(nèi)容
以……方式省略,顯示頭的文字內(nèi)容。
label.lineBreakMode = NSLineBreakByWordWrapping;以單詞為顯示單位顯
示,后面部分省略不顯示。
iOS開發(fā)的前景是非常好的。
ios開發(fā)行業(yè)近年發(fā)展較好,以目前iOS開發(fā)就業(yè)行情來說,iOS開發(fā)行業(yè)在就業(yè)率和就業(yè)薪資上是超越其他行業(yè)的,瀏覽相關(guān)招聘平臺便知。企業(yè)對于iOS開發(fā)人才也是非常需要的,相應(yīng)的給出的薪資待遇都是比較高的,萬元左右,根據(jù)個人學(xué)習(xí)發(fā)展可能會更高,因此在未來的5到10年間iOS開發(fā)的前景依然比較樂觀。
iOS開發(fā)學(xué)者只要學(xué)好這門技術(shù)了,技能與實戰(zhàn)的同步進行使其擁有一定的項目開發(fā)經(jīng)驗,在求職過程中具備更大的競爭優(yōu)勢,在前景比較好的行業(yè)中找工作,高薪自然會很容易。
iOS:基于Unix閉源的操作系統(tǒng),核心語言是Objective-C,相關(guān)的語言還有C語言(重點在數(shù)據(jù)結(jié)構(gòu)和算法),Swift(iOS開發(fā)的發(fā)展趨勢)
Android基于Linux的開源的操作系統(tǒng),開發(fā)語言是Java(通用性強)。
兩種語言各自的特點:
Android系統(tǒng)特點。Android系統(tǒng)由于是開放源代碼,所以支持它的手機很多,可以免費使用的軟件也很多,可以不斷升級。
iOS系統(tǒng)特點。他的主要特點是使用方便,靈活,但是由于其封閉的系統(tǒng),什么軟件要么買,要么越獄比較麻煩。
執(zhí)行效率的比較:
Android的編程語言是Java,特點是通用性強,但是效率低。
iOS的編程語言是Objective-C,專一性強,效率高。
百度移動統(tǒng)計是一款免費移動應(yīng)用統(tǒng)計分析工具,支持iOS和Android兩大平臺,開發(fā)者通過嵌入統(tǒng)計SDK,即可實現(xiàn)對移動應(yīng)用的全面監(jiān)測,實時掌握產(chǎn)品表現(xiàn),洞察用戶行為。
百度移動統(tǒng)計使用方法
百度移動統(tǒng)計只需要幾步設(shè)置即可查看報表:
1. 登錄官網(wǎng)
2. 注冊一個賬號(一個賬號下可以同時管理多個應(yīng)用,支持百度賬號和聯(lián)盟賬號兩種登錄方式)
3. 登錄后在全部應(yīng)用頁面點擊新增應(yīng)用,填寫應(yīng)用的基本信息,獲取應(yīng)用的唯一識別碼(即AppKey)
4. 下載對應(yīng)平臺的SDK(軟件安裝包,只有42K大小,業(yè)界最輕便),并參考SDK包中的開發(fā)文檔集成SDK。無需代碼層級的設(shè)置,可實時查看到除渠道分布、自定義事件之外的全部移動數(shù)據(jù)統(tǒng)計報表。
5. “渠道分布”和“自定義事件”的統(tǒng)計分析,需要開發(fā)者額外在SDK中的SetChannel和Void onEvent(詳細使用方法見SDK包中的“開發(fā)文檔”)函數(shù)中設(shè)置和調(diào)用相應(yīng)的接口。
百度移動統(tǒng)計使用經(jīng)驗
1. 高級篩選功能
百度移動統(tǒng)計的“高級篩選”功能能夠幫助開發(fā)者對報表按照時間維度、渠道維度、用戶類型和版本維度等四個維度進行交叉篩選。
1) 時間維度篩選
點擊“高級篩選”模塊右上方的時間控件,可以將數(shù)據(jù)報表按照時間段來篩選,包括“今日、昨日、最近7天、最近30天”,亦可以通過日歷控件選擇任何一個時間點或時間段。而且,通過時間控件的“對比”功能,讓開發(fā)者能夠自定義對比任何兩個時間點或時間段的報表數(shù)據(jù)。
百度移動統(tǒng)計還特別設(shè)計了“按小時”為粒度的時間篩選功能,讓開發(fā)者掌握數(shù)據(jù)的實時動態(tài)變化情況。
2) 渠道維度篩選
通過渠道篩選功能快速查看某一單一渠道的數(shù)據(jù)報表,考量某渠道的推廣效果和數(shù)據(jù)變化。
由于渠道商有時候會非常的多,甚至能達到幾百個渠道,因此百度移動統(tǒng)計的高級篩選功能還特別提供了“渠道商搜索框”的功能,只要在圖中紅色圈出來的框內(nèi)輸入渠道商的名稱或簡寫,就可以快速查看該渠道的數(shù)據(jù)報表。
3) 用戶類型篩選
用戶類型需要開發(fā)者在管理端進行提前設(shè)置,例如將注冊用戶和非注冊用戶設(shè)置成為兩個用戶類型,這樣就可以在“高級篩選”例表中對用戶類型進行篩選。
4) 版本維度篩選
移動應(yīng)用不同于傳統(tǒng)Website網(wǎng)站,不能實現(xiàn)在線主動升級,必須要讓客戶下載升級包才能夠?qū)崿F(xiàn)更新,因此移動應(yīng)用就存在多個版本都會有用戶在使用,有的超級應(yīng)用甚至有十幾個版本在同時被用戶使用著。通過“高級篩選”中的版本篩選維度就能夠快速選定某一版本,進行定向的數(shù)據(jù)報表分析。并且,如渠道篩選維度一樣,百度移動統(tǒng)計提供了“版本搜索”功能。
2. 為什么應(yīng)用的歷史數(shù)據(jù)會有增加的現(xiàn)象?
百度移動統(tǒng)計系統(tǒng)的使用者很多需要向上級做應(yīng)用數(shù)據(jù)的日報或周報,有不少用戶會困惑一點,就是為什么像新用戶、啟動次數(shù)、留存用戶等歷史數(shù)據(jù)會在之后有增加的現(xiàn)象?
原因是,百度移動統(tǒng)計為了體現(xiàn)數(shù)據(jù)的時效性,采用了“數(shù)據(jù)補償”的機制。例如,某用戶在9月1日啟動了應(yīng)用,但是由于網(wǎng)絡(luò)故障等原因?qū)е氯罩拘畔⑽茨芗皶r發(fā)出去,直到9月5日再次啟動聯(lián)網(wǎng)之后才發(fā)送出來。這樣一來,服務(wù)器是在9月5日接收到的日志,但用戶的數(shù)據(jù)屬于9月1日的,所以百度移動統(tǒng)計系統(tǒng)會自動將數(shù)據(jù)“補償”到9月1日的數(shù)據(jù)報表中,也就會出現(xiàn)所謂的“歷史數(shù)據(jù)增加”的現(xiàn)象了。一般來講,這個數(shù)據(jù)補償會在兩周左右趨于相對穩(wěn)定,具體時間根據(jù)應(yīng)用情況而不同。
3. “渠道分布”和“渠道來源細分”有什么區(qū)別?
百度移動統(tǒng)計的功能導(dǎo)航欄里面,有“渠道分布”和“渠道來源細分”兩個功能。乍一看,從字面上來講確實會產(chǎn)生疑惑——“這兩個功能有什么區(qū)別嗎?”
其實這兩個功能區(qū)別還是蠻大的,下面從兩個方面進行詳細的對比和區(qū)分:
1) 功能層面:
渠道分布:可以統(tǒng)計到來自不同渠道商的流量導(dǎo)入情況
渠道來源細分:對于Android應(yīng)用,能細分統(tǒng)計到不同推廣位置的導(dǎo)入效果;對于iOS應(yīng)用,能細分統(tǒng)計到App Store上游渠道來源的導(dǎo)入效果
2) 結(jié)算依據(jù):
渠道分布:對不同渠道導(dǎo)流數(shù)據(jù)統(tǒng)計準(zhǔn)確率超過95%,可以作為與渠道商結(jié)算依據(jù)
渠道來源細分:由于URL封裝后,從點擊到激活不可避免的會產(chǎn)生數(shù)據(jù)丟失,存在一定誤差,因此來源細分功能主要幫助開發(fā)者衡量各渠道之間的推廣效果,不建議作為與渠道商結(jié)算的依據(jù)。
4. 怎樣利用多維度指標(biāo)綜合分析“用戶粘性”?
移動開發(fā)者之所以關(guān)注用戶行為分析的本質(zhì)目的,就是為了提高用戶的使用粘性。所以用戶粘性分析是一個綜合維度的分析,很多指標(biāo)都可以從側(cè)面反映出應(yīng)用的用戶粘性程度,其中最直接衡量用戶粘性的指標(biāo)就是使用時長和使用頻率了。通常情況下,用戶使用時長越長、使用頻率越高說明用戶粘性越大。
使用頻率是指用戶在一天中啟動應(yīng)用程序的次數(shù),例如用戶某一天只在早晨8點和中午12點分別啟動過應(yīng)用,那么該用戶當(dāng)天的使用頻率就是2次。
使用時長是指用戶在某次啟動應(yīng)用到退出應(yīng)用的時間間隔,例如用戶于10點啟動應(yīng)用,于10點半退出應(yīng)用,那么該用戶的使用時長即為30分鐘。
如前文所述,用戶粘性是受到使用頻率和使用時長共同影響的,如下圖建立二維象限,即可將使用時長和頻率進行綜合分析,四個象限也分別代表高頻率高時長、高頻率低時長、低頻率高時長和低頻率低時長特點的應(yīng)用。
接下來,筆者針對上圖中四個象限的應(yīng)用特點進行逐一分析:
高頻率高時長:用戶粘性高,這類應(yīng)用通常滿足了用戶的剛性需求,用戶依賴度非常高,日啟動次數(shù)多,使用時間較長,應(yīng)用提供的核心功能用戶體驗極好。例如微信、微博等社交類應(yīng)用。
高頻率低時長:用戶粘性較高,這類應(yīng)用用戶依賴度很高,但是由于功能性有限或以滿足用戶某種專門需求為主,所以導(dǎo)致用戶每次啟動之后停留時間不長。例如工具類應(yīng)用,如殺進程、鬧鈴、提醒、流量監(jiān)測、清緩存等應(yīng)用。
低頻率高時長:用戶粘性較高,這類應(yīng)用用戶依賴度一般,但是由于極好地滿足了用戶的核心需求,所以每次啟動的停留時間都很長,用戶愿意在應(yīng)用上花更多的時間和精力。這類應(yīng)用主要集中在電商應(yīng)用、游戲類應(yīng)用和新聞閱讀類應(yīng)用。
低頻率低時長:用戶粘性低,這類應(yīng)用既沒有滿足用戶剛性需求又沒有讓人眼前一亮的用戶體驗,所以沒有得到用戶的認可和依賴,在用戶粘性上是失敗的應(yīng)用。
如果說上一個十年是WEB互聯(lián)網(wǎng)的時代,那么接下來的十年絕對就是移動互聯(lián)網(wǎng)的天下。對于移動開發(fā)者來講,這是一個絕佳的機會,但同樣意味著極大的挑戰(zhàn)。百度移動統(tǒng)計愿與全體開發(fā)者一同,引領(lǐng)大數(shù)據(jù)時代下移動應(yīng)用精細化、數(shù)據(jù)化運營的浪潮。
如果沒裝逼的話,那恭喜你,運氣這么好。這個薪資非常高了不建議跳槽。現(xiàn)在移動開發(fā),尤其IOS。市場根本死一大片。有三點可以得出,1、速成班越來越多,4個月輸出一堆學(xué)員到市場,2、開發(fā)越來越簡單,各種第三方越來越多,應(yīng)有盡有。不用科班出身,只要速成四個月,只要不是弱智兒,都能做出APP。堆積木而已。3、大環(huán)境下泡沫公司死一片,市場對IOS開發(fā)的需求比前幾年少了幾倍。IOS工作年限跟技術(shù)水平毫無關(guān)系。只不過是堆積木的速度而已。而IOS薪資向來就是虛高的,供求關(guān)系,倒逼效應(yīng),導(dǎo)致虛高。泡沫而已。現(xiàn)在市場不斷回歸理性。你這個薪資,出去基本上難以找到。
基礎(chǔ)
一定的編程經(jīng)驗
這里說的編程經(jīng)驗是至少熟練一門編程語言,對 OOP 有一定的了解,最好熟悉一些基本的設(shè)計模式。遇到過的好多 iOS 開發(fā),大多是從別的語言轉(zhuǎn)過來的,所以有一定的編程基礎(chǔ),學(xué)起來會更容易 get the point.
如果是第一次接觸編程,當(dāng)然也是沒問題的,只是要做好心理準(zhǔn)備,可能會比想象的難。
英語
發(fā)現(xiàn)不少開發(fā)對于英語似乎有點接受不能,通常都是中文優(yōu)先,除非迫不得已,才硬著頭皮看看 StackOverflow,英文文章,文檔等。忘了是誰說過「難走的路越走越好走」,通常如此。其實只要稍微 push 一下自己,那些技術(shù)文章啃下來應(yīng)該不會有太大的問題,有過幾次成功的體驗后,這種恐懼感就會減少很多。優(yōu)質(zhì)的文章、視頻、書籍,多是英文的,不邁過這個 坎,將來要么成為瓶頸,要么花更大的成本去填補。
入門
書籍
要學(xué)習(xí) iOS 開發(fā),自然要先學(xué) Objective-C (當(dāng)然現(xiàn)在也可以直接上 Swift,不過如果多人協(xié)作的話,OC目前還是主流),因為 OC 是 C 語言的超集,所以了解 C 語言對于學(xué)習(xí) OC 肯定會有幫助,不過就算不了解,直接學(xué) OC 也沒太大問題。
這里推薦 BNR (Big Nerd Ranch) 的這本 Objective-C Programming The Big Nerd Ranch Guide,講解地比較細致,能幫助你更好的理解 OC,更重要的是教你遇到問題時,如何去解決問題,以及這個問題對應(yīng)的一些知識點,如何使用文檔等等。
來到一個新的世界,肯定會對這個世界充滿好奇,想訂閱一大堆博客,買一堆書,看各種教程和視頻,然后就變得浮躁,不知該從哪下手,這會導(dǎo)致拖延癥。 我渴了,給我倒一杯水,這個很直接,馬上就可以做,但如果是給我買一瓶飲料,而自己對那些飲料又不怎么熟悉時,就糾結(jié)了,不如刷會微博,看看朋友圈,玩?zhèn)€小游戲先。
所以一本好的入門教材很重要,要契合自己當(dāng)前的水平,且常常會有收獲,這種成就感會激勵著你繼續(xù)學(xué)下去。
在看書的過程中,往往會有這樣的經(jīng)歷:書中提到某個人、觀點、知識點、書、文章,然后就順著它提到的這些東西出去了,可能某個知識點又牽扯到另一些內(nèi)容,然后就這樣越走越遠。想起了一個故事——
三只獵狗追一只土拔鼠,土拔鼠逃跑時鉆進了一個樹洞。這個樹洞只有一個出口,不一會兒,忽然從樹洞里跑出一只兔子。兔子飛快地向前跑,并爬上另一棵大樹。兔子因為慌亂在樹上沒站穩(wěn),掉了下來,砸暈了正仰頭看的三只獵狗,最后,兔子終于逃脫。
對于這個故事可以從不同的角度去解讀,我更愿意以初心去解讀。兔子為什么會爬樹?為什么能砸暈三只獵狗?這不是重點,重點是,之前追趕的土撥鼠哪去了?看書時難免會有延伸閱讀,這個深度我覺得不宜超過 2 層,不然很容易就回不來了。
還有就是如果有可能,最好每天都看點,這其實是很難的,因為總是會有優(yōu)先級更高的事,或者之前的某些習(xí)慣在干擾。一旦斷了幾天,就不想再拿起來了。
還有,蘋果官方的 Start Developing iOS Apps Today 也是很不錯的入門材料。
視頻
推薦斯坦福老頭子(Paul Hegarty)的 Developing iOS 7 Apps for iPhone and iPad ,當(dāng)初也是看的這個(那時還是更老的版本),Paul 是資深的 Mac/iOS 開發(fā)(前蘋果員工?),很多知識點講得很到位,學(xué)生們的提問也大都在點上,同時配有Demo,總之聽下來會對 iOS 開發(fā)有比較全面的了解。
同時推薦一本小冊子:objc-zen-book,花不長時間就能看完,里面是一些 Best Practices,對于編寫優(yōu)質(zhì)代碼會很有幫助。
筆記
這是一個持久的過程,任何階段都適用。以前也沒太在意這個,覺得概念性的東西,腦子過一遍,就大概知道了,然后就去啃其他的東西了,現(xiàn)在看來,如果有記筆記的話,會更有助于消化概念、知識點,也可以記錄自己的思考過程。達芬奇就記錄了10000多頁的筆記。
記筆記可以加深對知識點的理解,而成為編程巨星的唯一秘訣就是:對所做的事情理解地越深,就會做得越好。同時如果遵循遺忘曲線去復(fù)習(xí)的話,效果更佳。對知識點了解地足夠透徹后,Debug 時才更有可能知道問題出在哪,解決問題也更容易有思路。
筆記不僅可以記知識點,也可以記錄調(diào)試過程,比如這篇筆記,有一種調(diào)試方法:小黃鴨調(diào)試法
許多程序員都有過向別人(甚至可能向完全不會編程的人)提問及解釋編程問題,就在解釋的過程中擊中了問題的解決方案。一邊闡述代碼的意圖一邊觀察它實際上的意圖并做調(diào)試,這兩者之間的任何不協(xié)調(diào)會變得很明顯,并且更容易發(fā)現(xiàn)自己的錯誤。
生活中我們可能不會真的這么去做,這時抽離出另一個自己,記錄下跟ta的對話,也是個發(fā)現(xiàn)問題的好方法。
練習(xí)
這也是一個持續(xù)的過程,知道了些概念或原理后,總是會想著去驗證下是不是這樣,無論結(jié)果是否如自己預(yù)期,實踐的過程會降低對語言的陌生感,慢慢地培養(yǎng)一種駕馭這門語言的自信,如果出了錯,正好可以重新梳理一下。
目標(biāo)
如果靜下心來看完了 BNR 的這本書,以及斯坦福的 iOS 開發(fā)視頻,那么對 OC 應(yīng)該比較了解了,一些常用的 UIKit 用起來也沒什么問題了,比如 UIViewController / UIView / UIScrollView / UIImageView / UITableView。也熟悉一些概念,如 KVO / MVC / Delegate / DataSource。
這個階段下來,應(yīng)該會有:哦,iOS 開發(fā)也就這樣嘛,多翻翻文檔,熟悉 Cocoa Touch 的一些 Class,差不多也能做出一個簡單的 App 了。
進階
入門之后,接下來可以折騰的東西還會有不少。
書籍
Effective Objective-C 2.0,里面提到了 52 種提高 iOS App 質(zhì)量的途徑。涉及了 API 設(shè)計、protocols / category 的使用、寫出更模塊化的代碼等,讀下來應(yīng)該會有不少收獲。
iOS Programming: The Big Nerd Ranch Guide (4th Edition),又是一本 BNR 的書,這本書的特點是通過 Demo 來引出知識點,然后提一些問題,并且會細說解題思路。看書的過程中,對于元學(xué)習(xí)能力的提升也會有一定幫助。
--- update ---
發(fā)現(xiàn)巧哥的 iOS開發(fā)進階 已經(jīng)可以在京東買到了,雖然沒有細看,但巧哥出品質(zhì)量肯定有保障。
其他資源
進入這個階段后,可以去探索更大的世界了,現(xiàn)在的資源已經(jīng)很豐富了,但還是要遵循「少而精」的原則。以下是我覺得挺不錯的資源
iOS Dev Weekly 每周一期,內(nèi)容多為這一星期里值得關(guān)注的Github項目、文章、工具等。
iOS 移動開發(fā)周報 這是唐巧大大整理的每周不錯的 iOS 開發(fā)相關(guān)的內(nèi)容,多為中文。
RayWenderlich 很多詳細又全面的教程,不容錯過。
iOS Dev Slack 國內(nèi)不少 iOS 開發(fā)(包括大大們)都在這里,不過現(xiàn)在好像不怎么能拿到邀請了。
中文 iOS/Mac 開發(fā)博客列表,打開工具訂閱吧。
還有,如果可能的話,多去分享自己學(xué)到的東西,教是最好的學(xué),我試過幾次,效果真的很不錯。
目標(biāo)
這個階段下來,對于常用的設(shè)計模式、內(nèi)存管理、Blocks 的使用、圖像操作、網(wǎng)絡(luò)請求和管理、多線程應(yīng)該比較熟悉了。對于 CALayer、Animation、UIScrollView、UITableView、UICollectionView、 ViewController Container 則非常熟悉,對「非常熟悉」的定義是:不打開 Xcode,腦子里就能把相應(yīng)的知識點復(fù)述出來 80% ,比如這個類有哪些方法,Delegate / DataSource 有哪些方法,怎么使用,如果要實現(xiàn)某個效果,應(yīng)該怎么做(好吧, UICollectionView 除外)。
高級
其實高級、進階、入門并沒有嚴(yán)格的界限,在入門階段也可以探究高級階段的一些東西。我覺得支撐我們不斷探索和前進的動力不是興趣,而是永不滿足的好奇心,和對優(yōu)雅代碼的追求。
If your standards are low, you're going to stop pretty early on in the process.
BNR 的這篇 Leveling Up 已經(jīng)講得很好了,也更加細致。
書籍
iOS 7 Programming Pushing the Limits 這本書對 iOS 7 的一些特性會講解地比較深入,當(dāng)然也不僅僅是 iOS 7。只嘆 iOS 更新實在太快,書籍往往跟不上,一本好書往往需要很長時間來撰寫,等書可以出版了,iOS 又出新版本了。
源碼
看優(yōu)秀的源碼,可以學(xué)到很多東西,使用過程中遇到問題也更容易解決。這些是我覺得值得細看的源碼:AFNetworking(NSOperation, HTTP, Block), SDWebImage(Image Handle, Cache, NSOperation, Block),SVPullToRefresh(UIScrollView, State Handle), JSONModel(runtime)
如果有興趣,也可以翻翻 CoreFoundation / OC runtime 的源碼。
資源
oleb
NSHipster
objc.io || objcio.cn
WWDC 視頻
工具
chisel Facebook 出品的 LLDB 助手,用于調(diào)試很方便
Reveal 每當(dāng)好奇某個 App 的實現(xiàn)時,都會打開它一窺究竟,用于調(diào)試自己的 App 也很方便
Aspects steipete 大大出品的一款方便使用 method swizzling 的工具,可以在運行時動態(tài)添加代碼到某個方法
class-dump 從 Mach-O 文件生成 OC 頭文件,有時想看看某個 App 大概是如何組織的會比較方便
Hopper 可以對二進制文件進行反編譯,甚至可以生成偽代碼!有時想看看 UIViewController 里某個方法大概是怎么實現(xiàn)的,就可以用它。
Instruments 這個內(nèi)置的工具對于發(fā)現(xiàn) App 的各種問題很有幫助,如內(nèi)存占用、泄露,渲染問題等。
目標(biāo)
這個階段,對于底層的實現(xiàn)會有更深入的了解,各種 Core 開頭的 Framework 至少可以說出個大概,工具也能熟練使用,「正經(jīng)的代碼」寫過數(shù)萬行,可能天天在翻 Dash。如果別人讓你實現(xiàn)某個功能,能在較短的時間內(nèi)給出不錯的實現(xiàn)方案,并且足夠細致,甚至精細到如何使用 Core Graphic 去畫某個圖像。
其他
我覺得無論學(xué)習(xí)什么,「速成」的心態(tài)是最要不得的,這只會讓自己變得浮躁,一知半解,整個過程也很難讓自己的元學(xué)習(xí)能力得到提升。慢慢來,攻占一個城后,再去打下一個,這時心態(tài)也會平和許多。
分享名稱:ios移動開發(fā)周報,蘋果手機周報
URL標(biāo)題:http://chinadenli.net/article0/dsesdio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站設(shè)計公司、網(wǎng)站營銷、網(wǎng)站制作、電子商務(wù)、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)