標籤:
這些東西,等用的時候查資料就行,用的多了,自然就記住了,大概過一下
Foundation 架構
它是IOS應用程式開發的基礎,常用的架構有80多個,而 foundation 是他們所有的基礎,提供了許多基本的對象類和資料類型,比如數字,字串,數組,集合,字典,處理日期時間,自動化記憶體管理,檔案,歸檔,處理幾何資料結構等。它為所有應用程式提供基本的資料服務,
Foundation和介面無關,其首碼為NS 。
在Foundation中有些類僅被MAC OS支援而不被IOS支援。
在 mac ox x 中 Cocoa 總的指 Foundation 架構和 application kit 架構,而 cocoa touch 是指 foundation 和 uikit 架構。
Foundation 裡常用的結構體:
NSRange(location length)用來表示範圍,分多種情況
NSPoint \ CGPoint(開發中常用後者)
NSSize \ CGSize
NSRect \ CGRect (CGPint CGSize)
NSRange原型
typedef struct _NSRange { NSUInteger location; NSUInteger length;} NSRange;
這是 NSRange 結構體的內部結構的形式,兩個成員,一個長度,一個位置。不需要再和 c 一樣使用 struct 關鍵字,且成員的資料類型是 NSUInteger
typedef unsigned long NSUInteger;
屬於無符號長整數型別的替代寫法,就知道它就是一個整型的正數而已。
使用 NSRange 結構體表示範圍,比如:
//{1, 2, 3, 4, 5} //表示3,4,5的範圍,location=2,length=3
從0開始計數,第2個位置開始,長度為3。
字串裡 love 的範圍,從0開始計數第2個位置,長度為4
@"i love oc";
下面這兩種寫法不推薦(前者可讀性太差,後者太冗長)
//NSRange r1 = {2, 4}; // 不用//NSRange r2 = {.location = 2, .length = 4};// 不用
要掌握下面這個寫法,上面的兩個不使用
NSRange r3 = NSMakeRange(2, 4); // 掌握
那麼在工程中,經常用到的一個尋找字串位置的方法
NSString *str = @"i love oc"; // 尋找某個字串在str中的範圍,很常用的一個方法,重要! // 如果找不到,length=0,location=NSNotFound==-1 NSRange range = [str rangeOfString:@"java"]; NSLog(@"loc = %ld, length=%ld", range.location, range.length);
因為,location 是無符號 long 類型,那麼-1列印出來會是一個很大的正數。當然,如果最高位按照負數表示了,也就是NSNotFound按照(帶符號)整數列印,那麼就是-1。
NSPoint \ CGPoint
點結構體
struct CGPoint { CGFloat x; CGFloat y;};typedef struct CGPoint CGPoint;
還有:
typedef CGPoint NSPoint;typedef struct _NSPoint { CGFloat x; CGFloat y;} NSPoint;
繼續查看:
typedef CGFLOAT_TYPE CGFloat;
繼續查看:
#define CGFLOAT_TYPE double
本質就是 double 類型
類似 NSRange 結構體
CGPoint p1 = NSMakePoint(10, 10);NSPoint p2 = CGPointMake(20, 20);// 最常用
NSSize \ CGSize
表示 UI 高度,寬度尺寸的結構體,聯想記憶。
NSSize s1 = CGSizeMake(100, 50); NSSize s2 = NSMakeSize(100, 50); CGSize s3 = NSMakeSize(200, 60);
CGRect 綜合的表示點和尺寸
CGRect r1 = CGRectMake(0, 0, 100, 50); CGRect r2 = { {0, 0}, {100, 90}}; CGRect r3 = {p1, s2};
使用CGPointZero等的前提是添加CoreGraphics架構
CGRect r4 = {CGPointZero, CGSizeMake(100, 90)};
表示原點
CGPointZero == CGPointMake(0, 0);
將結構體轉為字串
//NSString *str = NSStringFromPoint(p1); //NSString *str = NSStringFromSize(s3); NSString *str = NSStringFromRect(r1); NSLog(@"%@", str); // NSLog(@"x=%f, y=%f, width=%f, height=%f", r1.origin.x, r1.origin.y, r1.size.width, r1.size.height);
使用這些CGPointEqualToPoint、CGRectContainsPoint等函數的前提是添加CoreGraphics架構
比較兩個點是否相同(x、y)
BOOL b = CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
比較兩個矩形是否相同
CGRectEqualToRect(<#CGRect rect1#>, <#CGRect rect2#>)
比較兩個位置是否相同
CGSizeEqualToSize(<#CGSize size1#>, <#CGSize size2#>)
x (50, 150) y (40 , 90),看這個矩形裡,是否包含某點
BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45)); NSLog(@"%d", b2);
IOS-Foundation架構