iOS 小知識點(持續更新)

 

 

 

 

 

一、如何經過代碼設置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

 

八、

蘋果公司帳號申請:
這個是申請方法:http://jingyan.baidu.com/article/0320e2c1d153161b87507bba.html
這個是官網:https://developer.apple.com/enroll/organization/

 

九、關閉定時器

[_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。

相關文章
相關標籤/搜索