-------------------------------------- android教育訓練、java教育訓練、ios教育訓練期待與您交流! ---------------------------------
包含Foundation頭檔案
#import <Foundation/Foundation.h>
結構體
NSRange:表示範圍,location位置(unsignedlong),length長度(unsigned long)
NSPoint\CGPoint:表示一個點,x(CGFloat\double),y(CGFloat\double)
NSSize\CGSize:表示ui的尺寸,width寬度(CGFloat\double),height高度(CGFloat\double)
NSRect\CGRect:表示位置大小,CGPoint和CGSize
//
// main.m
// Foundation中的結構體
//
// Created by zhouxf on 14-4-17.
// Copyright (c) 2014年 zhouxf. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
// NSRange
//@"i love oc" // love的範圍
// 位置2,長度4
NSRange r1 = {2, 4};
NSRange r2 = {.location = 2, .length = 4};
NSRange r3 = NSMakeRange(2, 4); // 需要掌握
NSString *str = @"i love oc";
// 查找某個字元串在特定字元串的範圍
// 如果找不到,length = 0,location = NSNotFound == -1
NSRange range = [str rangeOfString:@"love"];
// NSPoint\CGPoint
NSPoint p1 = NSMakePoint(11, 11);
CGPoint p2 = CGPointMake(1, 1); // 最常用
// CG開頭函數是在CoreGraphics架構定義的,運作時需要将其加入
// 表示原點
//CGPointZero == CGPointMake(0, 0)
// 點與點比較
CGPointEqualToPoint(CGPointMake(1, 1), CGPointMake(11, 11));
// NSSize\CGSize
NSSize s1 = NSMakeSize(1, 1);
CGSize s2 = CGSizeMake(11, 11); // 開發中常用CG
//CGSizeZero == CGSizeMake(0, 0)
// 比較尺寸
CGSizeEqualToSize(CGSizeMake(1, 1), CGSizeMake(1, 1));
// NSRect\CGRect
CGRect rt1 = CGRectMake(0, 0, 10, 10);
CGRect rt2 = {{0, 0}, {11, 11}};
//CGRectZero == CGRectMake(0, 0, 0, 0)
// CGRect比較
CGRectEqualToRect(CGRectMake(0, 0, 1, 1), CGRectMake(0, 0, 1, 1));
// CGRect是否包含點
CGRectContainsPoint(CGRectMake(11, 11, 22, 22), CGPointMake(33, 33));
// 将結構體裝化為字元串
NSString *str1 = NSStringFromRange(r1);
NSLog(@"%@", str1);
NSString *str2 = NSStringFromPoint(p1);
NSLog(@"%@", str2);
NSString *str3 = NSStringFromSize(s1);
NSLog(@"%@", str3);
NSString *str4 = NSStringFromRect(rt1);
NSLog(@"%@", str4);
return 0;
}
Foundation中的常用類
NSString:不可變字元串
NSMutableString:可變字元串
/*
NSString:不可變字元串
NSMutableString:可變字元串
*/
// 1.字元串的建立
NSString *s1 = @"jack";
NSString *s2 = [[NSString alloc] initWithString:s1];
NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 11];
// c字元串轉oc字元串
NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
// oc字元串轉c字元串
const char *cs = [s4 UTF8String];
// 從檔案中讀取内容
NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/zhouxf/Documents/code/other/other/main.m" encoding:NSUTF8StringEncoding error:nil];
//URL:資源路徑
// 協定頭://路徑
// 本地資源 file://
// ftp://
// http://
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
//file:///Users/zhouxf/Documents/code/other/other/main.m
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", s6);
/*
NSString類中有對象方法initWithXXX,一般就有對應的對象方法stringWithXXX與之配對
其他類也是如此
[NSString stringWithFormat:<#(NSString *), ...#>] == [[NSString alloc] initWithFormat:<#(NSString *), ...#>]
*/
// 将字元串寫入檔案,writeToFile\writeToURL
[@"jack\nrose" writeToFile:@"/Users/zhouxf/Documents/code/test.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
// 拼接内容到字元串後建立新字元串
NSString *ns = [s1 stringByAppendingString:@"rose"];
// 可變字元串
NSMutableString *ms1 = [NSMutableString stringWithFormat:@"age is 10"];
// 直接将拼接到可變字元串後面
[ms1 appendFormat:@"%d %d", 11, 1];
// 删除某個範圍的字元串
NSRange range = [ms1 rangeOfString:@"is"];
[ms1 deleteCharactersInRange:range];
(NSArray、NSSet、NSDictionary統稱為集合類)
NSArray:不可變數組
NSMutableArray:可變數組
l 有序;
l 快速建立(不可變):@[obj1,obj2, obj3]
l 快速通路元素:數組名[i]
// 集合類
/*
NSArray:不可變數組
NSMutableArray:可變數組
*/
// oc數組不能存放nil值
// oc數組隻能存放oc對象、不能存放非oc對象類型,比如int、struct、enum等
//這個array就是空數組,而且不可變
//NSArray *array = [NSArray array];
NSArray *array2 = [NSArray arrayWithObject:@"jack"];
// nil是數組元素結束的标記
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", @"jim", nil];
// 快速建立oc數組對象,編譯器特性
NSArray *array4 = @[@"jack", @"rose"];
// 擷取數組元素個數
//[array2 count];
NSLog(@"%ld", array2.count);
// 通路數組元素
NSLog(@"%@", [array3 objectAtIndex:1]);
NSLog(@"%@", array3[1]); // 編譯器新特性,使用c數組通路方式
// 周遊數組
for (int i = 0; i < array3.count; i++) {
NSLog(@"%@", array3[i]);
}
// 快速周遊數組
// id obj 代表着數組中的每一個元素
for (id obj in array3) {
// obj在數組中的位置
NSUInteger i = [array3 indexOfObject:obj];
NSLog(@"%ld:%@", i, obj);
}
// 每周遊一個元素就調用一次block
// 并且把目前元素和位置當作參數傳給block
// stop:停止标志符, *stop = YES時停止周遊
[array3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%ld:%@", idx, obj);
if (idx == 1) {
*stop = YES;
}
}];
// 建立可變數組
NSMutableArray *ma = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
// 增加元素
[ma addObject:@"jack"];
[ma addObject:@"jack1"];
[ma addObject:@"jack2"];
// 删除指定對象的元素
[ma removeObject:@"jim"];
// 删除指定位置的元素
[ma removeObjectAtIndex:0];
// 删除最後元素
[ma removeLastObject];
// 删除所有元素
[ma removeAllObjects];
NSSet:不可變set
NSMutableSet:可變set合
l 無序
與NSArray比較:
1. 共同點
都是集合,都能存放多個oc對象
隻能存放oc對象,不能存放非oc對象(int、char、float等,結構體,枚舉)
本身不可變,都有一個可變的子類
2. 不同點
NSArray有序,NSSet無序
/*
NSSet:不可變set
NSMutableSet:可變字set
*/
// 建立不可變set
NSSet *set1 = [NSSet setWithObjects:@"jack", @"rose", nil];
// 随機通路一個元素
NSString *str = [set1 anyObject];
// 建立可變set
NSMutableSet *mset = [NSMutableSet set];
// 增加元素
[mset addObject:@"jack"];
[mset addObject:@"jack1"];
// 删除元素
[mset removeObject:@"jack"];
NSDictionary:不可變字典
NSMutableDictionary:可變字典
l 無序
l 快速建立(不可變):@{key1:obj1,key2:obj2, key3:obj3}
l 快速通路元素:字典名[key]
/*
NSDictionary:不可變字典
NSMutableDictionary:可變字典
*/
// 建立不可變字典
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
NSArray *keya = @[@"name", @"age", @"address"];
NSArray *obja = @[@"jack", @11, @"北京"];
NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:obja forKeys:keya];
NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack", @"name",
@"北京", @"address"
,nil];
// 快速建立字典,編譯器特性
NSDictionary *dict4 = @{@"name": @"jack", @"address": @"北京"};
// 通路元素
[dict objectForKey:@"name"];
// 快速通路元素,編譯器特性
id obj = dict[@"name"];
// 建立可變字典
NSMutableDictionary *md = [NSMutableDictionary dictionary];
// 增加或更新元素
[md setObject:@"jack" forKey:@"name"];
[md setObject:@"北京" forKey:@"address"];
[md setObject:@"rose" forKey:@"name"];
[md setObject:@"1111" forKey:@"qq"];
// 删除元素
[md removeObjectForKey:@"name"];
NSLog(@"%@", md);
// 周遊
NSArray *ka = [md allKeys];
for (int i = 0; i < md.count; i++) {
NSLog(@"%@:%@", ka[i], md[ka[i]]);
}
// 周遊
[md enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@=%@", key, obj);
}];
NSNumber:數字類,将數字包裝成oc對象
// 數字轉NSNumber
NSNumber *num = [NSNumbernumberWithInt:11];
// NSNumber轉數字
int i =[num intVaule];
@20; // 快速建立NSNumber對象,編譯器特性
@10.1; //同上
@YES; //同上
@’a’; //同上
int age = 20;
@(age);//同上
NSVaule:能将任何資料類型都能包裝成oc對象
// 将結構體CGPoint包裝成NSVaule對象
NSVaule *v = [NSVaulevauleWithPoint:CGPointMake(1, 1)];
// 從NSVaule對象擷取CGPoint的值
[v pointVaule];
NSDate:日期類
/*
NSDate:日期類
*/
// 建立時間對象(目前時間)
NSDate *date = [NSDate date];
// 列印的時0時區時間
NSLog(@"%@", date);
// 建立比date晚5秒的時間對象
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
// 計算utc時間,機關:秒
/*double*/NSTimeInterval sec = [date2 timeIntervalSince1970];
// 日期格式化類
NSDateFormatter *df = [[NSDateFormatter alloc] init];
// 設計日期格式
// y 年 M 月 d 日
// m 分 s 秒 H (24)時 h (12)時
df.dateFormat = @"yyyy-MM-dd HH:mm:ss";
// 日期轉字元串
NSString *ds = [df stringFromDate:date2];
NSLog(@"%@", ds);
NSString *time = @"2011/11/11 11:11";
df.dateFormat = @"yyyy/MM/dd HH:mm";
// 字元串轉時間
NSDate *dt = [df dateFromString:time];
NSLog(@"%@", dt);
練習:計算代碼行數
//
// main.m
// 計算檔案行數
//
// Created by zhouxf on 14-4-9.
// Copyright (c) 2014年 zhouxf. All rights reserved.
//
#import <Foundation/Foundation.h>
NSUInteger linesFromFile(NSString *path)
{
// 擷取檔案管理者(單列對象)
NSFileManager *fm = [NSFileManager defaultManager];
// 是否是目錄标志符
BOOL isDir = NO;
// 判斷路徑是否存在
BOOL isEx = [fm fileExistsAtPath:path isDirectory:&isDir];
// 路徑不存在
if (!isEx) {
NSLog(@"the file of path:%@ is no exist!", path);
return 0;
}
// 是目錄
if (isDir) {
NSUInteger count = 0;
// 擷取目錄中的内容:即檔案和子目錄
NSArray *nameArray = [fm contentsOfDirectoryAtPath:path error:nil];
// 周遊
for (NSString *name in nameArray) {
// 拼接全路徑
NSString *fileName = [NSString stringWithFormat:@"%@/%@", path, name];
// 遞歸計算行數
count += linesFromFile(fileName);
}
return count;
} else {
// 擷取檔案擴充名(忽略大小寫)
NSString *extension = [[path pathExtension] lowercaseString];
// 對檔案進行過濾
if (![extension isEqualToString:@"h"]
&& ![extension isEqualToString:@"c"]
&& ![extension isEqualToString:@"m"]) {
return 0;
}
// 讀取檔案内容
NSString *fileContents = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
// 通過換行符分割
NSArray *fileLines = [fileContents componentsSeparatedByString:@"\n"];
// 去掉檔案的公共路徑
NSRange range = [path rangeOfString:@"/Users/zhouxf/Documents/code/"];
NSString *file = [path stringByReplacingCharactersInRange:range withString:@""];
// 列印檔案路徑和行數
NSLog(@"%@:%ld", file, fileLines.count);
// 傳回行數
return fileLines.count;
}
}
int main(int argc, const char * argv[])
{
NSString *path = @"/Users/zhouxf/Documents/code";
NSUInteger count = linesFromFile(path);
NSLog(@"lines count = %ld", count);
return 0;
}
-------------------------------------- android教育訓練、java教育訓練、ios教育訓練期待與您交流! ---------------------------------