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 . NSInteger
和 int
區別 以及 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 . 監控 UITableView
和 UIScrollView
上下滑動時觸發某個辦法(例如:上下滑動時封閉鍵盤)
用 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 . nil
、Nil
、NULL
和 NSNUll
的了解
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] ; // 相比擬下面一種寫法, 這種寫法是正確的
Nil
:nil
和 Nil
在運用上沒有嚴厲規則,但凡運用 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_list
。va_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
添加兩個告訴,監聽 UIKeyboardWillShowNotification
和 UIKeyboardWillHideNotification
形態,在彈起鍵盤和隱藏鍵盤時,和鍵盤輸出法變卦後高度變卦,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
scrollsToTop
是 UIScrollView
的一個屬性,次要用於點擊設備的形態欄時,使 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 . UITableView
的 headerView
跟隨 cell
的內容一同滾動
首先看看 tableView
有幾個表頭,假如只要一個,不要用 tableView
的 delegate
來設置。直接自己定義一個 view
,賦給 tableview
的 tableHeaderView
就可以了(tableView.tableHeaderView = view)
23 . [UIApplication sharedApplication].keyWindow
添加視圖有效
由於這個時分 appdelegate
中的 keyWindow
還沒有創立成功,將下面代碼修正為[[[UIApplication sharedApplication] delegate] Window]
即可
24 . UITextView
和 UITextField
區別
UITextView
支持多行輸出並且可以滾動顯示閱讀全文,而 UITextField
只能單行輸出。
UITextView
承繼自 UIScrollView
, UITextField
承繼自 UIView[UIControl]
。
UITextview
沒有 placeholder
屬性 UItextField
有 placeholder
屬性
在運用上我們完全可以把UITextView看作是UITextField的增強版。
25 . 修正 UITextField
的 placeHolder
字體顏色
第一種
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 . contentSize
、conentOffset
、contentInset
區別
contentSize
是 scrollview
可以滾動的區域,比方 frame = (0 ,0 ,320 ,480) contentSize = (320 ,960)
,代表你的 scrollview
可以上下滾動,滾動區域為 frame
大小的兩倍。
contentOffset
是 scrollview
以後顯示區域頂點絕對於 frame
頂點的偏移量,比方上個例子你拉到最上面,contentoffset
就是(0 ,480),也就是y偏移了480
contentInset
是 scrollview
的 contentview
的頂點絕對於 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"]; // 移除動畫
【根底知識(二)】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!