一、如何經過代碼設置Button title的字體大小html
設置ios
Button.titleLabel.font = [UIFont systemFontOfSize:<#(CGFloat)#>];
二、獲取當前時間git
NSDate *timeDate=[NSDate date]; NSDateFormatter * dateformatter=[[NSDateFormatter alloc] init]; [dateformatter setDateFormat:@"YYYYMMddHHmmsssss"]; NSString *locationString=[dateformatter stringFromDate:timeDate];
三、判斷字符串是否爲空字符的方法github
- (BOOL) isBlankString:(NSString *)string { if (string == nil || string == NULL) { return YES; } if ([string isKindOfClass:[NSNull class]]) { return YES; } if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) { return YES; } return NO; }
四、tableView優化swift
//刷新整個表格 [_tableView reloadData]; //刷新當前行 [_tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
五、百度地圖自定義大頭針圖片數組
- (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id <BMKAnnotation>)annotation { // 生成重用標示identifier static NSString *AnnotationViewID = @"AnnotationViewID"; // 檢查是否有重用的緩存 BMKAnnotationView* annotationView = [view dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID]; ((BMKPinAnnotationView*)annotationView).pinColor = BMKPinAnnotationColorGreen; annotationView.image = [UIImage imageNamed:@"XXX.png"]; }
六、iOS APP上架所須要的 屏幕尺寸緩存
640*960、640*113六、750*133四、1242*2208服務器
七、iOS APP 圖標的尺寸併發
58*5八、80*80、120*120、180*180app
八、
九、關閉定時器
[_myTimer invalidate];
_myTimer = nil;
十、鍵盤釋放第一響應
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
十一、點擊UITableViewCell時,沒有點擊效果,
在cellForRowAtIndexPath:方法中寫上
cell.selectionStyle = UITableViewCellSelectionStyleNone;
十二、使用NSJSONSerialization 返回的對象,取決於最外層是什麼,若是是{}那就是字典,[]那就是數組等
1三、只支持豎屏,修改info.plist 文件就能夠了。找到"Supported interface orientations" 設置item 項爲Portrait就能夠了。這個設置爲全局設置。
1四、iOS開發
先搭框架,後畫界面,寫功能,寫接口,調試,寫適配
iOS 開發文檔 流程圖 UI 框架 接口 功能 適配 測試 更改
iOS 初級開發工程師 C語言基礎+swift語言基礎
中級iOS開發工程師 iOS項目開發+UI部分+動畫圖層部分
1五、ViewController的生命週期中各方法執行流程以下:
init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc
1六、GCD
1)運行在主線程的Main queue,經過dispatch_get_main_queue獲取。
2)並行隊列global dispatch queue,經過dispatch_get_global_queue獲取,由系統建立三個不一樣優先級的dispatch queue。並行隊列的執行順序與其加入隊列的順序相同。
3)串行隊列serial queues通常用於按順序同步訪問,可建立任意數量的串行隊列,各個串行隊列之間是併發的。
1七、Xcode項目中咱們常常遇到由於空數據(服務器傳回來的數據經過JsonKit解析爲之類的)致使內存泄漏進而程序崩潰的現象,這個在以前學校的時候就被坑了不少次,因此有必要封裝一個非空處理的類,因爲能力有限,查看一些網上的資料,想到採用遞歸的方式處理。
解決辦法:一個老外早已在Githud有了空處理的神器:https://github.com/nicklockwood/NullSafe,只要將這個類別(Category)加入項目中就可萬事無憂,因爲裏面代碼我也不太懂,因此你們本身研究下哈。
1八、讀取plist文件
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"provinces.plist" ofType:nil];
NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];
// 加載plist數據 // 一個NSBundle對象對應一個資源包(圖片、音頻、視頻、plis等文件) // NSBundle的做用:用來訪問與之對應的資源包內部的文件,能夠用來得到文件的全路徑 // 項目中添加的資源都會被添加到主資源包中 // [NSBundle mainBundle]關聯的就是項目的主資源包 NSBundle *bundle = [NSBundle mainBundle]; // 利用mainBundle得到plist文件在主資源包中的全路徑 NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"]; // NSString *file = [bundle pathForResource:@"shops.plist" ofType:nil]; // 凡是參數名爲File,傳遞的都是文件的全路徑 shopsArray = [NSArray arrayWithContentsOfFile:file];
1九、懶加載:用到時再去加載,並且也只加載一次
(1).懶加載基本
懶加載——也稱爲延遲加載,即在須要的時候才加載(效率低,佔用內存小)。所謂懶加載,寫的是其get方法.
注意:若是是懶加載的話則必定要注意先判斷是否已經有了,若是沒有那麼再去進行實例化
(2).使用懶加載的好處:
好處一:沒必要將建立對象的代碼所有寫在viewDidLoad方法中,代碼的可讀性更強
好處二:每一個控件的getter方法中分別負責各自的實例化處理,代碼彼此之間的獨立性強,鬆耦合
20、
//字符串轉變爲數組 NSMutableString * str=[[NSMutableString alloc]initWithFormat:@"1,1,1,1,1,1"]; //字符串轉變爲數組2 NSMutableArray * array=[NSMutableArray arrayWithArray:[str componentsSeparatedByString:@","]]; //替換數組中的某個值 [array replaceObjectAtIndex:4 withObject:@"2"]; //把數組轉換成字符串 NSString *ns=[array componentsJoinedByString:@","];
2一、NSCalendar
//1. 建立1個當前的日曆對象.
// 做用: 能夠取到1個日期對象的各個部分.
NSCalendar *calendar = [NSCalendar currentCalendar];
//2. 指定日曆對象,要去取日期對象的那些部分.
NSDateComponents *com = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday fromDate:date];
//3. 經過NSDateComponents取到指定的日期的各個部分.
NSLog(@"%lu",com.year);
NSLog(@"%lu",com.month);
NSLog(@"%lu",com.day);
NSLog(@"%lu",com.weekday);
*/
2二、將NSString 拆分紅array
NSString * writerPos=@"10,30,400,300";
NSArray *arrWriterPos =[writerPos componentsSeparatedByString:NSLocalizedString(@",", nil)];//拆分紅數組
2三、UITableView每一個cell之間的默認分割線如何去掉
很簡單,只須要
tableView.separatorStyle = NO;
2四、設置tableviewcell不讓選中
1:cell.userInteractionEnabled = NO;
2:[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
這兩種方法都能實現不讓cell有點擊事件。
但若是cell中有button第一個方法也會讓button失去點擊事件。
2五、iOS 怎麼設置 UITabBarController 的第二個item爲第一響應者?
UITabBarController *VC = [[UITabBarController alloc]init];
VC.selectedIndex = 1;
[self.navigationController pushViewController:VC animated:YES];
2六、如何設置ios app應用名稱?
info.plist文件中添加一個key:Bundle display name,value 填上應用名稱
2七、設置uiscrollview偏移量:
scrollView.contentOffset=CGPointMake(int x, int y);
2八、狀態欄
在iOS7中,狀態欄默認狀況下歸控制器管理,好比狀態欄的樣式、狀態欄的是否可見
控制器經過重寫如下方法來控制狀態欄
設置狀態欄的樣式
(UIStatusBarStyle)preferredStatusBarStyle;
其中UIStatusBarStyleLightContent是白色樣式
設置狀態欄的可見性
- (BOOL)prefersStatusBarHidden;
2九、懶加載
爲了改變現狀,能夠考慮將圖片數據線保存到一個數組中,數組中有序地放着不少字典,一個字典表明一張圖片數據,包含了圖片名、圖片描述
@property (strong, nonatomic) NSArray *images;
因爲只須要初始化一次圖片數據,所以放在get方法中初始化
將屬性放在get方法中初始化的方式,稱爲「懶加載」\」延遲加載」
30、OC語法規定:不容許直接修改對象的結構體屬性的成員
下面代碼是錯誤的:
self.headBtn.frame.origin.y -= 10;
3一、transform屬性
利用transform屬性能夠修改控件的位移(位置)、縮放、旋轉
建立一個transform屬性(仔細看這裏的方法名,裏面有個Make,是和下面進行疊加方法最大的區別)
CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) ;
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)
(注意:angle是弧度制,並非角度制)
在某個transform的基礎上進行疊加
CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);
CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);
清空以前設置的transform屬性
view.transform = CGAffineTransformIdentity;
3二、當你發現經過代碼沒法修改控件的位置或者尺寸的時候,應該去掉storyboard裏面的autolayout功能
3三、instancetype
instancetype在類型表示上,跟id同樣,能夠表示任何對象類型
instancetype只能用在返回值類型上,不能像id同樣用在參數類型上
instancetype比id多一個好處:編譯器會檢測instancetype的真實類型
3四、重寫init方法的使用和注意
必定要調用super的init方法:由於初始化父類中會聲明一些成員變量和其餘屬性
就是調用super的init方法 最後返回的就是一個id也就是self
有時候調用[super init]方法返回的不必定是一個self,可是爲了保證它返回的是一個self就要進行一個賦值操做;
注意:調用super 初始化完畢 就必定要賦值給self
返回一個self意思是:返回一個已經初始化完畢的一個對象
構造方法的注意點:
先調用父類的構造方法[super init];
再進行子類內部成員變量的初始化
3五、layoutSubviews做用
layoutSubviews是對subviews從新佈局。好比,咱們想更新子視圖的位置的時候,能夠經過調用layoutSubviews方法,既能夠實現對子視圖從新佈局。
layoutSubviews默認是不作任何事情的,用到的時候,須要在自雷進行重寫。
3六、layoutSubviews如下狀況會被調用
蘋果官方文檔已經強調,不能直接調用layoutSubviews對子視圖進行從新佈局。那麼,layoutSubviews什麼狀況下會被調用呢?經過百度搜索,發現如下幾種狀況layoutSubviews會被調用。
直接調用setLayoutSubviews。(這個在上面蘋果官方文檔裏有說明)
addSubview的時候。
當view的frame發生改變的時候。
滑動UIScrollView的時候。
旋轉Screen會觸發父UIView上的layoutSubviews事件。
改變一個UIView大小的時候也會觸發父UIView上的layoutSubviews事件。
3七、property的使用策略
strong 通常是使用在OC對象上 (也可使用在UI控件上(會有問題的))
NSSArray NSDictionary 模型...
weak 通常是使用在UI控件上 也可使用在OC對象(也是有問題的)
UITextFeild UIButton.....
copy 通常使用在NSString Block
assign 通常是使用基本數據類型上, 枚舉 結構體
3八、一個控件有2種建立方式
第1、經過代碼建立
初始化時必定會調用initWithFrame:方法
第2、經過xib\storyboard建立
初始化時不會調用initWithFrame:方法,只會調用initWithCoder:方法
初始化完畢後會調用awakeFromNib方法
有時候但願在控件初始化時作一些初始化操做,好比添加子控件、設置基本屬性
這時須要根據控件的建立方式,來選擇在initWithFrame:(給控件設置位置)、initWithCoder:、awakeFromNib(初始化控件)的哪一個方法中操做
3九、tableview 的detailTextLabel 不起做用
要想給tableview加detailTextLabel,
initWithStyle必須爲:UITableViewCellStyleSubtitle
40、一個 view 在父視圖中心
child.center = [parent convertPoint:parent.center fromView:parent.superview];
4一、鍵盤上方增長工具欄
UIToolbar *keyboardDoneButtonView = [[UIToolbar alloc] init]; [keyboardDoneButtonView sizeToFit]; UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneClicked:)]; [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]]; txtField.inputAccessoryView = keyboardDoneButtonView;
4二、判斷某一行的 cell 是否已經顯示
CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath]; BOOL completelyVisible = CGRectContainsRect(tableView.bounds, cellRect);
4三、隱藏 UITextView/UITextField 光標
textField.tintColor = [UIColor clearColor];
4四、修改UITextField光標位置
textFielde.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)]; textField.leftViewMode = UITextFieldViewModeAlways;
4五、Block的循環引用
若是在Block中使用_strong修飾符的對象類型自動變量,當block從棧複製到堆時,該對象爲Block所持有。這樣就容易引發循環引用。
爲了不循環引用可使用_block變量、_weak修飾符以及_unsafe_unretained修飾符。
_block和_weak的區別:
1._block能夠修飾對象,也能夠修飾基本類型。
2._weak只能夠修飾對象。
3._block在block中能夠被從新賦值,_weak不能夠。
_unsafe_unretained不會被自動置空爲nil。