你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 根底知識(二)

根底知識(二)

編輯:IOS開發綜合

根底知識(二)

1 . NSDate 時間的計算

獲取如今的時間: NSDate *dateNow = [NSDate date]; // @“2015-11-10 10:01:01” 輸入的是這種格式的 計算從什麼時間~什麼時間(一段時間): NSTimeInterval periodTime = [[NSDate date] timeIntervalSinceDate : dateNow];
// 把要計算的代碼運轉時間放在這兩句代碼兩頭 時間轉時間戳: NSTimeInterval time = [[NSDate date] timeIntervalSince1970] // 時間戳是NSTimeInterval型,也是long型 時間戳轉時間: NSDate *date = [NSDate dateWithTimeIntervalSince1970:time] 時間戳轉字符串: NSString *timeSp = [NSString stringWithFormat:@"%d", (long)[time timeIntervalSince1970]]; 字符串轉時間戳: NSTimeInterval time = [timeSp longLongValue];

設置時間的顯示格式和將 NSDate 轉成 NSString

NSDate *select = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];   // 想要獲取清晨的時間:設置為@"yyyy-MM-dd 00:00:00”即可; 設置年月日時分秒格式的時間:@“yyyy-MM-dd HH:mm:ss”  hh和HH區別:辨別表示12小時制,24小時制
NSString *dateS =  [dateFormatter stringFromDate:select];
時間的比擬:可以用時間戳直接比擬: if ([string longLongValue] < time)

獲取以後時間的年、月、日、時、分、秒 :

NSDate *now = [NSDate date]; // 獲取以後時間
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:now];
NSUInteger year = [dateComponent year];    // 年
NSUInteger month = [dateComponent month];   // 月
NSUInteger day = [dateComponent day];       // 日
NSUInteger hour = [dateComponent hour];     // 時
NSUInteger minute = [dateComponent minute]; // 分
NSUInteger second = [dateComponent second]; // 秒

2 . ARC與非ARC轉換

添加 -fobjc-arc : 讓原來不支持ARC 的運用ARC
添加 -fno-objc-arc : 讓原來支持ARC的不運用ARC

3 . NSIntegerint 區別 以及 NSUInteger、NSNumber

NSInteger 會依據零碎的位數(32or64)自動選擇 int 的最大數值(int or long)。當需求運用 int 類型的變量的時分,可以用 int ,也可以用 NSInteger typedef unsigned int NSUInteger; // 這是NSInteger的定義 NSUInteger 是無符號的,即沒有正數, NSInteger 是有符號的

NSNumber 是一個類,其他的是根本類型

例如:[array addObject:3] //這種寫法是錯誤的
     [array addObject:[NSNumber numberWithInt:3]] // 這種寫法是正確的

4 . 數據類型及對應字節數、位數?

32位操作零碎中: int是4個字節,32位,每個字節占8位。
char 是1個字節、char* 是4個字節、float 是4個字節、double 是8個字節、long 是4和字節、long long 是8個字節、unsigned long 是4個字節;
64位操作零碎中: char是1個字節、char* 是8個字節、int 是4個字節、float 是4個字節、double 是8個字節、long 是8個字節、long long 是8個字節、unsigned long 是8個字節

5 . 輕量級: 普通指規模較小,或許功用較為完善,比方Mysql數據庫和orcal數據庫比擬,前者就屬於輕量級。

6 . UIPasteBoard :粘貼板

7 . 字符串拼接

stringByAppendingString: // 需求手動在稱號前加“/”
stringByAppendingPathComponent: // 不需求  

  例如:  

NSString *imagePath = [skinPath stringByAppendingString:[NSString stringWithFormat:@"/%@",imageName]]; // 是在skinPath加後綴的意思
NSString *imagePath = [skinPath stringByAppendingPathComponent:imageName]; // 是在skinPath前面加上“/”號銜接imageName讓它成為完好的途徑

8 . 監控 UITableViewUIScrollView 上下滑動時觸發某個辦法(例如:上下滑動時封閉鍵盤)

UIScrollView 的代理辦法:-(void)scrollViewDidScroll:(UIScrollView *)scrollView;
用這個辦法之前要先完成 UIScrollViewDelegate
由於 UITableView 承繼自 UIScrollView,所以只需完成 UITableViewDelegate,即可運用下面 UIScrollView 的代理辦法.

9 . UITableViewDelegate 的兩個參數

@required : 必需完成的代理辦法 , 若沒定義兩個參數,則默許是必需完成的代理辦法;
@optional : 不用須完成的代理辦法;

普通定義 delegate 屬性都是用 assign,避免循環circular count發生


例如:@property(nonatomic, assign) id<UITableViewDelegate>delegate;

10 . nilNilNULLNSNUll 的了解

nil :給對象賦值普通運用 object=nil ,表示把這個對象釋放掉。稱為“空對象”。關於這種空對象,一切關於 retain 的操作都會惹起順序解體,例如字典添加鍵值或數組添加新元素等。

id object = nil;
[array addObject : object]; // 這種寫法是錯誤的

NSNull : 和 nil 區別在於,nil 是一個空對象,曾經從內存中消逝了,若想表達“我們需求有一個容器,但這個容器裡什麼也沒有”的觀念時,就用 NSNull ,稱為 “值為空的對象” 。NSNull 這個類承繼 NSObject ,只要一個 “+(NSNull *)null” ;類辦法。這闡明 NSNull 對象擁有一個無效的內存地址,所以在順序中對它的任何援用都不會招致順序解體。

if(object = nil) { object = [NSNull null]; } //  [NSNull null]是一個對象
[array addObject:object] ; // 相比擬下面一種寫法, 這種寫法是正確的
NilnilNil 在運用上沒有嚴厲規則,但凡運用 nil 的中央都可以用 Nil 來替代,反之亦然。只不過我們商定俗成的將 nil 表示一個空對象,Nil 表示一個空類。
NSString *string = nil;
Class classA = Nil;
NULL :Object-C 來源於C、支持於C,也有別於C。而 NULL 就是C言語的語法,它表示一個空指針。普通賦值給 nil 之外的其他空值,如SEL
int *point = NULL;
nil是一個對象指針為空,Nil是一個類指針為空,NULL是根本類型為空

11 . 音頻播放 AudIOServicesPlaySystemSound : 關於復雜的、無混音音頻,可以運用這個函數來播放復雜的聲響

12 . 正則表達式

正則表達式,又稱正軌表示法,是對字符串操作的一種邏輯公式。正則表達式可以檢測給定的字符串能否契合我們定義的邏輯,也可以從字符串中獲取我們想要的特定局部。

13 . UIToolBar:工具欄

UIToolBar 是我們常常用的控件之一。例如:在 navigation bar 下面加一個 UIToolBar,在 view 的底部加一個 UIToolBar,在鍵盤的下面加一個 UIToolBar

14 . UIViewAutoresizing autoresizingMask

 UIViewAutoresizingNone : superview變換時,自己不做變換 
 UIViewAutoresizingFlexibleTopMargin: 上邊距彈性可變,下邊距堅持不變
 UIViewAutoresizingFlexibleWidth:控件的寬度隨著父視圖的寬度按比例改動
 UIViewAutoresizingFlexibleHeight:上邊距不變,和superview在高度上變化同等高度。比方,superview加高100,則自己也加高100

15 . va_list

IOS完成傳遞不定長的多個參數點辦法是運用 va_listva_list 的運用需求留意:

首先在函數裡定義 va_list 型的變量,這個變量是指向參數的指針 然後用 va_start 初始化剛定義的 va_list 變量 然後用 va_arg 前往可變的參數,va_arg 的第二個參數是你要前往的參數的類型,假如函數有多個可變參數的,順次調用 va_arg 獲取各個參數

最後用 va_end 宏完畢可變參數的獲取

例如:

+(void) functionName:(NSObject *)string,…{
      va_list args; // 定義一個指向個數可變的參數列表指針
      va_start (args, string) ; // string為第一個參數,也就是最左邊的已知參數,這裡就是獲取第一個可選參數的地址
      if (string) { 
          NSString *otherString;
          while ((otherString = va_arg (args, NSString *))) { // 前往參數列表中指針所指的參數,前往類型為NSString,並使參數指針指向參數列表中下一個參數
                // 順次獲取一切參數
          }
      }
      va_end (args); // 清空參數列表,並置參數指針args有效
}

16 . NSTextContainer、NSLayoutManager、NSTextStorage

這是 UITextView 在IOS7新添加的類。

NSTextStorage:保管並管理 UITextView 要展現的文字內容,該類是NSMutableAttributedString 的子類,由於可以靈敏地往文字添加或修正屬性,所以十分適用於保管並修正文字屬性。 NSLayoutManager:用於管理 NSTextStorage 其中的文字內容的排版規劃。 NSTextContainer:定義了一個矩形區域用於寄存曾經停止了排版並設置好屬性的文字

17 . 獲取鍵盤高度
http://www.cnblogs.com/qingjoin/archive/2012/09/12/2681659.html
http://blog.csdn.net/lwq421336220/article/details/32073633

添加兩個告訴,監聽 UIKeyboardWillShowNotificationUIKeyboardWillHideNotification 形態,在彈起鍵盤和隱藏鍵盤時,和鍵盤輸出法變卦後高度變卦,willshow監聽會再次收到告訴

18 . 判別字符串能否包括某個字符

if ([text rangeOfString:@"\n"].location != NSNotFound) {
}
[text containsString : @“\n”]; // 這是8.0之後才有的API,手機零碎低於8.0則會出錯

19 . 關聯:是指把兩個對象互相關聯起來,使得其中的一個對象作為另一個對象的一局部。

關聯特性只要在Mac OS X V10.6以及當前的版本上才是可用的;
運用關聯我們可以不必修正類的定義而為其對象添加存儲空間;

創立關聯:objc_setAssociatedObject:該函數需求四個參數:源對象、關鍵字、關聯的對象、關聯戰略. 關鍵字是一個 void 類型的指針,每個關聯的關鍵字必需是獨一的,通常采用靜態變量來作為關聯戰略標明了相關的對象是經過賦值、保存援用還是復制的方式停止關聯的,還有這種關聯是原子的還是非原子的 獲取相關聯的對象:objc_getAssociatedObject 斷開關聯:objc_setAssociatedObject :傳入 nil 值即可

運用 objc_removeAssociatedObject 可以斷開一切關聯。通常狀況下不建議運用這個函數,由於他會斷開一切關聯。只要在需求把對象恢復到“原始形態”的時分才會運用這個函數

例:把一個字符串關聯到一個數組
    static char overviewKey;
    NSArray *array = [[NSArray alloc] initWithObjects:@“one”, @“two”, @“three”, nil];
    NSString *overview = [[NSString alloc] initWithFormat:@“%@”, @“first three numbers”];
    objc_setAssociatedObject(array, &overviewKey, overview, OBJC_ASSOCIATION_RETAIN);
    NSString *associatedObject = (NSString *) objc_getAssociatedObject(array, &overviewKey);
    objc_setAssociatedObject(array, &overviewKey, nil, OBJC_ASSOCIATION_ASSIGN);

20 . scrollsToTop

scrollsToTopUIScrollView 的一個屬性,次要用於點擊設備的形態欄時,使 scrollsToTop == YES 的控件滾動前往至頂部。

每一個默許的 UIScrollView 的實例,他的 scrollsToTop 屬性默許為 YES,所以要完成某一 UIScrollView 的實例點擊設備形態欄前往頂部,則需求封閉其他的 UIScrollView 的實例的scrollsToTop 屬性為 NO。

很好了解:若多個 scrollView 呼應前往頂部的事情,零碎就不知道究竟要將那個 scrollView 前往頂部了,因而也就不做任何操作了。

21 . 獲取某個控件在另一個控件上的地位

 - (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;

 例如:CGRect rect = [moreBtn convertRect:moreBtn.bounds toView:tableView]; 
      // 獲取moreBtn在tableview上的地位

22 . UITableViewheaderView 跟隨 cell 的內容一同滾動

首先看看 tableView 有幾個表頭,假如只要一個,不要用 tableViewdelegate 來設置。直接自己定義一個 view ,賦給 tableviewtableHeaderView 就可以了(tableView.tableHeaderView = view)

23 . [UIApplication sharedApplication].keyWindow 添加視圖有效

由於這個時分 appdelegate 中的 keyWindow 還沒有創立成功,將下面代碼修正為[[[UIApplication sharedApplication] delegate] Window] 即可

24 . UITextViewUITextField 區別

UITextView 支持多行輸出並且可以滾動顯示閱讀全文,而 UITextField 只能單行輸出。 UITextView 承繼自 UIScrollView , UITextField 承繼自 UIView[UIControl]

UITextview 沒有 placeholder 屬性 UItextFieldplaceholder屬性

在運用上我們完全可以把UITextView看作是UITextField的增強版。

25 . 修正 UITextFieldplaceHolder 字體顏色

第一種

UIColor *color = [UIColor whiteColor];  
_userName.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"用戶名" attributes:@{NSForegroundColorAttributeName: color}];  

第二種

[_userName setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"]; 

26 . 創立一個懸浮的按鈕(相似於網頁上的“回到頂部”按鈕)

UIButton *publishBtn = [ [UIButton alloc] init];
[publishBtn bringSubviewToFront:_tableView]; // 按鈕懸浮在tableView上

27 . contentSizeconentOffsetcontentInset 區別

contentSizescrollview 可以滾動的區域,比方 frame = (0 ,0 ,320 ,480) contentSize = (320 ,960) ,代表你的 scrollview 可以上下滾動,滾動區域為 frame 大小的兩倍。 contentOffsetscrollview 以後顯示區域頂點絕對於 frame 頂點的偏移量,比方上個例子你拉到最上面,contentoffset 就是(0 ,480),也就是y偏移了480 contentInsetscrollviewcontentview 的頂點絕對於 scrollview 的地位,例如你的 contentInset = (0 ,100) ,那麼你的 contentview 就是從 scrollview 的(0 ,100)開端顯示

28 . UITableViewCell 顯示最底部的 cell

 //假如tableView前往多個section,每個section中只要1個row,則在[tableView reloadData]後,加上

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:_tableDataArr.count - 1];  
    if (indexPath.section < [self numberOfSectionsInTableView:tableView]) {  
        [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];  
    }

// 假如tableView前往1個section,每個section中有多個row,則在[tableViewreloadData]後,加上

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow: _tableDataArr.count - 1 inSection:0];  
    if (indexPath.row < [tableView numberOfRowsInSection:0]) {  
       [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];  
    }

29 . UIButton 設置周圍的顏色

  button.layer.borderWidth = 0.5; // 先設置周圍邊距的寬度
  button.layer.borderColor = [UIColor BlackColor].CGColor; // 再設置邊距顏色

30 . NSString stringWithFormat: 可以對數值停止四捨五入

  [NSString stringWithFormat:@“%.2f”, @“1.01003”]; // 1.01
  [NSString stringWithFormat:@“%.2f”, @“1.01503”]; // 1.02
  [NSString stringWithFormat:@“%.2f”, @“1.01403”]; // 1.01
  [NSString stringWithFormat:@“%.2f”, @“1.01003”]; // 1.01

// 對數字轉字符串的處置,對數字只捨不入NSRoundDown,例如:0.126 = 0.12

    // price:需求處置的數字, position:保存小數點第幾位
    - (NSString *)notRounding:(float)price afterPoint:(int)position{
        NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:position raiSEOnExactness:NO raiSEOnOverflow:NO raiSEOnUnderflow:NO raiseOnDivideByZero:NO];
        NSDecimalNumber *ouncesDecimal;
        NSDecimalNumber *roundedOunces;
        ouncesDecimal = [[NSDecimalNumber alloc] initWithFloat:price];
        roundedOunces = [ouncesDecimal decimalNumberByRoundingAccordingToBehavior:roundingBehavior];
        return [NSString stringWithFormat:@"%@",roundedOunces];
    }

    調用:  float s =0.126;
           NSString *sv = [self notRounding:s afterPoint:2];
           NSLog(@"sv = %@",sv);
           輸入後果為:sv = 0.12

31 . 縮放動畫

  self.focusBtn.transform = CGAff.netransformMakeScale(1.0f, 1.0f);
  [UIView beginAnimations:nil context:UIGraphicsGetCurrentContext()];
  [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; //InOut 表示進入和出去時都啟動動畫
  [UIView setAnimationDuration:5]; //動畫時間
  self.focusBtn.transform=CGAff.netransformMakeScale(0.01f, 0.01f); //先讓要顯示的view最小直至消逝
  [UIView commitAnimations]; //啟動動畫

或許:

 self.focusBtn.layer.anchorPoint = CGPointMake(0.5, 0.5);
 [self setAnchorPoint:CGPointMake(0, 0.5) forView:self.focusBtn];
 self.focusBtn.transform = CGAffineTransformMakeScale(1.0f, 1.0f);

 [UIView animateWithDuration:1.0 animations:^{
      self.focusBtn.transform=CGAffineTransformMakeScale(0.01f, 0.01f);   
 } completion:^(BOOL finished) {
     self.focusBtn.hidden = YES;
     self.iconBgImage.frame = CGRectMake(0, bigMargin, iconBgW, iconWH);
     UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, self.iconBgImage.w, iconWH) byRoundingCorners:UIRectCornerTopRight | UIRectCornerBottomRight cornerRadii:CGSizeMake(iconBgRadius, iconBgRadius)];
     CAShapeLayer *maskLayer = [CAShapeLayer layer];
     maskLayer.frame = CGRectMake(0, 0, self.iconBgImage.w, iconWH);
     maskLayer.path = bezierPath.CGPath;
     self.iconBgImage.layer.mask = maskLayer;
 }];    

- (void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view
{
    CGPoint oldOrigin = view.frame.origin;
    view.layer.anchorPoint = anchorPoint;
    CGPoint newOrigin = view.frame.origin;
    CGPoint transition;
    transition.x = newOrigin.x - oldOrigin.x;
    transition.y = newOrigin.y - oldOrigin.y;
    view.center = CGPointMake (view.center.x - transition.x, view.center.y - transition.y); 
}

32 . 平面旋轉動畫

CABasicAnimation* rotationAnimation;
 rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"]; // 圍繞著y軸旋轉
 rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 ];
 rotationAnimation.duration = 1.2;
 rotationAnimation.cumulative = YES;
 rotationAnimation.repeatCount = MAXFLOAT;
 [self.buttonTitle.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; // 添加動畫
 [self.buttonTitle.layer removeAnimationForKey:@"rotationAnimation"]; // 移除動畫

【根底知識(二)】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved