OC 基础学习笔记

命名规则:

必须以字母或下划线(_)开头,之后可以是任何(大写或小写)字母、下划线或者0~9之间的数字组合。

 

Objective-C中的大小写是有区别的。

 

类名,通常以大写字母开头。

实例变量、对象以及方法的名称,通常以小写字母开头。

而名称中的新单词应以大写字母开头。

 

@interface部分

@interface  NewClassName : ParentClassName

                  propertyAndMethodDeclarations;

@end

 

类方法,是对类本身执行某些操作的方法,例如创建类的新实例。

实例方法,能都对类的实例执行一些操作。

 

声明一个方法:

-/+                      returnType              methodName                              :                                                  (parameterType)  parameter

方法类型                返回类型                  方法名称              :(方法有参数)                     参数类型                               参数名称

 

@implementation部分

@implementation NewClassName

{

                  memberDeclarations;

}

                  methodDefinitions;

@end

 

类或实例应用方法:

[ ClassOrInstance  method ];

 

类型

实例

NSLog字符

char

‘a’、’\n’

%c

Short int

 

%hi、%hx、%ho

unsigned short int

 

%hi、%hx、%ho

int

12、-97、0xFFE0、0177

%i、%x、%o

unsigned int

12u、100U、0XFFu

%u、%x、%o

long int

12L、-200L、0xffffL

%li、%lx、%lo

unsigned long int

12UL、100ul、0xffeeUL

%lu、%lx、%lo

long long int

0xe5e5e5e5LL。500ll

%lli、%llx、%llo

unsigned long long int

12ull、0xffeeULL

%llu、%llx、%llo

float

12.34f、3.1e-5f、0x1.5p10

%f、%e、%g、%a

double

12.34、3.1e-5、0x.1p3

%f、%e、%g、%a

long double

12.34L、3.1e-5l

%Lf、%Le、%Lg

id

nil

%p

 

除逗号运算符外的所有运算符都比赋值运算符的优先级高,而所有的赋值运算符的优先级相同。故:

a /= b + c 相当于 a = a / (b +c)

 

与任何算术运算符或关系运算符相比,&&运算符有更低的优先级,但他比||运算符的优先级要高。

 

闰年:能被4整除但不能被100整除,或能被400整除。

 

Boolean类型:

C语言拥有布尔数据类型bool,它具有true和false值。

Objective-C提供了相似的类型BOOL,它具有YES(1)和NO(0)值。

注:Objective-C并不将BOOL作为仅能保存YES和NO值的真正的布尔类型来处理。编译器将BOOL认做8位二进制数,YES和NO只是一种约定。所以如果不小心将一个长于1字节的整数值(例如short或int值)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。假设该低位字节刚好为0(例如8960,写出十六进制为0x2300),BOOL值将会是0,即NO值。

 

条件运算符是从右到左结合的,这意味着在单个表达式中可以使用多个运算符,因此语句e1 ? e2 : e3 ? e4 : e5

相当于

e1 ? e2 :(e3 ? e4 : e5)

 

实现部分(@implementation部分)包含的是私有信息,即实例变量和代码。

 

@property指令标志属性。

@synthesize  property =instanceVar;

属性的命名与实例变量相同,尽管不是必须要这么做。当属性名与实例变量名不同时,访问属性应用以下语法

self.property = value;

[instanceVar  setProperty];

以使编译器知道我们期望使用访问器访问property,否则编译器将假设我们直接修改了实例变量,因为在这种情况调用@synthesize指令后编译器仍将创建-setProperty:和-property方法,但实现中却使用实例变量instanceVar。

如果使用了@property指令,就不需要在实现部分声明相应的实例变量。

《Objective-C基础教程》(p172)

关于属性、存取方法和实例变量:《Objective-C程序设计(第四版)》(p202)

 

根类:没有父类的类,位于类层次结构的最顶层。

超类 / 父类

子类

 

要在子类中直接使用(父类的)实例变量,必须现在接口部分声明。在实现部分声明和合成(@synthesize)的实例变量是私有的,子类并不能够直接访问,需要明确通过定义的或合成的取值方法,才能访问实例变量的值。

 

@class指令

使用@class指令提高了效率,因为编译器不需要引用和处理整个ClassName.h文件,只需要知道ClassName是一个类名。如果需要引用ClassName类的方法(在实现部分中),@class指令是不够的,因为编译器需要更多的消息。它需要清楚方法有多少参数,它们是什么类型、方法的返回类型是什么。

 

多态:使不同的类共享相同方法名称的能力称为多态。

 

Id数据类型,是一种通用的对象类型。也就是说,id可以用来存储属于任何类的对象。

 

存储在id变量中的对象类型在编译时无法确定,所以一些测试推迟到运行时进行。也就是说,推迟到程序执行时。

 

静态类型,“静态”指的是对存储在变量中对象的类型进行显式声明,这样,存储在这种形态中的对象的类时预定义的,也就是静态的。

关心静态类型时因为它能更好地在程序编译阶段而不是在运行时指出错误。另一个原因是它能够提高程序的可读性。

 

要根据类名或另一个对象生成一个类对象,可以向它发送class消息。

[ ClassOrInstance  class ];

 

selector是SEL类型,可以对一个方法名应用@selector指令生成。

 

覆写init方法的标准“模板”:

                  -(id) init

                  {

                                    self= [ super  init ];

                                    If( self ) {

                                                      //初始化代码

                                    }

}

 

在接口部分声明实例变量时,可以通过一下指令精确地控制其作用域(《Objective-C程序设计(第四版)》(p201))

@protected、@private、@public、@package

 

 

enum类型:

enum typeName { valuseList}

枚举标识符对应着一个整数值,默认0开始递增。

枚举标识符可以共享相同的值,比如

enum boolean { no = 0, false = 0, yes = 1, true = 1 };

Objective-C编译器实际上将枚举标识符作为整型常量来处理。如

enum month { january =1, february, march, april, may, june, july,august, september, october, november, december };

enum month thisMonth;

thisMonth = february;

那么给thisMonth赋的值是整数2(而不是february这个名字)。

 

type语句:

定义步骤:

(1)     像声明所需类型的变量那样编写一条语句。

(2)     在通常应该出现声明的变量名的地方,将其替换为新的类型名。

(3)     在语句的前面加上关键字typedef。

例子:定义一个名为Direction的枚举数据类型,它包含4个方向:东、南、西、北。

typedef enum { east, west, south, north} Direction;

Direction step1, step2;

 

移位运算符

左移:

                  超出数据项的高位的位将丢失,而从低位移入的值总为0。

右移:

1.    无符号的值向右移位总是左侧移入0。

2.    有符号,左侧移入1还是0取决于被移动数字的符号,还取决于该操作在计算机的实现方式。正值都将移入0。负值时或移入1(算术右移),或移入0(逻辑右移)。

 

命名的分类:(不能包含实例变量)

@interface  ClassName (分类名) // 接口部分

// 类别方法声明

@end

@implement  ClassName (分类名) // 实现部分

// 类别方法的定义

@end

将类的定义模块化到相关方法的组或分类中。它提供了扩展现有类定义的简便方式。

在使用一个对象时,对象的方法是在接口中声明、在父类中声明还是在类别中声明并不重要。

 

未命名的分类(类的扩展):

能包含实例变量。

未命名分类中声明的方法需要在主实现区域实现,而不是分离的实现区域中实现。

 

@protocol指令 (协议)

@protocol  protocolName

// 方法列表

@optional

// 可选方法列表

@end

协议是多个类共享的一个方法列表。

协议中列出的方法没有相应的实现,计划由其他人来实现。

协议列出了一组方法,有些可以是选择实现,有些是必须实现。

通过在@interface行的一对尖括号(<···>)内列出协议名称,可以告知编译器你正在采用一个协议。这项协议的名称放在类名和它的父类名称之后。如

@interface  AddressBook :NSObject <NSCopying>

@interface  AddressBook :NSObject <NSCopying , NSCoding>

协议不引用任何类,它是无类的。

定义一项协议时,可以扩展现有的协议如

@protocol  Drawing3D<Drawing >

分类也可以采用一项协议,语句如下

@interface  ClassName (分类名) protocolName

 

非正式协议/抽象协议

它实际上是一个分类,列出了一组方法但并没有实现它们。(一般的分类,有声明有定义)

和正式协议不同,编译器不提供有关非正式协议的帮助。

而@optional指令的出现取代了非正式协议的使用。

 

#define

预定义名称一出现,预处理程序就执行文本替换,这可以解释为什么通常不能使用分号结束#define语句的原因。

#define  IS_LEAP_YEAR(y)  y%4 == 0 && y%100 != 0 || y%400 == 0

#define  SQUARE(x)  ( (x) * (x) )

 

NSNumber的创建方法和检索方法

创建和初始化方法

初始化实例方法

检索实例方法

numberWithChar

initWithChar

charValue

numberWithUnsignedChar

initWithUnsignedChar

unsignedCharValue

numberWithShort

initWithShort

shortValue

numberWithUnsignedShort

initWithUnsignedShort

unsignedShortValue

numberWithInteger

initWithInteger

integerValue

numberWithUnsignInteger

initWithUnsignInteger

unsignIntegerValue

numberWithInt

initWithInt

intValue

numberWithUnsignedInt

initWithUnsignedInt

unsignedIntValue

numberWithLong

initWithLong

longValue

numberWithUnsignedLong

initWithUnsignedLong

unsignedLongValue

numberWithLongLong

initWithLongLong

longlongValue

numberWithUnsignLongLong

initWithUnsignedLongLong

unsignLongLongValue

numberWithFloat

initWithFloat

floatValue

numberWithDouble

initWithDouble

doubleValue

numberWithBool

initWithBool

boolValue

 

[intNumber  isEqualToNumber:floatNumber]

使用了isEqualToNumber:方法比较两个NSNumber对象的数值。方法返回一个BOOL值。

[intNumber  compare: myNumber]

中intNumber的值小于myNumber的值时,返回NSOrderedAscending;如果这两个数刚好相等,则返回NSOrderdSame;如果intNumber的值大于myNumber的值,则返回NSOrderedDescending.

其中NSOrderedAscending、NSOrderdSame和NSOrderedDescending都是NSComparisonResult类型的值。

 

应该注意,不能修改前面创建的NSNumber对象的值。例如

NSNumber *myNumber = [[NSNumber alloc]  initWithInt : 50];

···

[myNumber  initWithInt :1000];

所有的数字对象都必须时新创建的。

 

numberWithInt:和numberWithInteger:使用有些差别:

1.    如果使用numberWithInt:方法创建一个整型数,需要使用intValue获取它的值,使用%i作为格式化字符串显示它的值。

2.    如果使用numberWithInteger:方法创建一个整型数,需要使用integerValue,也可以转换成long显示或者使用stringWithFormat:将它格式化成字符串。使用%i作为格式化字符串。

 

description方法:

格式符%@可用于显示数组、字典和集合的全部内容。通过覆盖继承的description方法还可以使用这些格式字符显示类对象。

-(NSString *) description

{

                  return[NSString  stringWithFormat: @”%i%i”,numerator, denominator];

}

 

+(NSString *) stringWithString : (NSString * str)

[NSString  stringWithString :str1];

使用一个字符串str1的内容生成一个新字符串

 

+(id)  stringWithFormat :(NSString *) format, …;

NSString *height;

height = [NSString stringWithFormat : @”Your hright is %d feet, %d inches”, 5, 11];

得到的字符串是“Your height is 5 feet, 11 inches”。

 

[str1  stringByAppendingString:  str2];

创建一个新的字符串对象,这个对象由str1和str2的字符拼接而成,然后返回结果。

 

[str1 length];

计算字符串中的字符

 

正确比较字符串

比较两个字符串是否相等,应该用isEqualToString:,而不能仅仅只是比较字符串的指针值。

==运算符只判断操作数的指针数值,而不是它们所指的对象。利用这点可以判断两个指针是否指向同一对象。

 

 

不区分大小写的比较

compare:方法进行的是区分大小写的比较。

compare:options:方法能给我们更多的控制权。

options参数是一个位掩码,可以使用位码运算符(|)来添加选项标记。常用的选项如下

NSCaseInsensitiveSearch——不区分大小写字符

NSLiteralSearch——进行完全比较,区分大小写。

NSNumericSearch——比较字符串的字符个数,而不是字符值。如果没有这个选项,“100”会排在“99”的前面,这会让人觉得奇怪,甚至也可能是错误的排序。

 

-(BOOL)  hasPrefix : (NSString*)  aString;// 检查字符串是否以另一个字符串开头。

-(BOOL)  hasSuffix : (NSString*)  aString;// 检查字符串是否以另一个字符串结尾。

-(NSRange)  rangeOfString :(NSString *)  aString;// 检查字符串内的某处是否包含其他字符串。

 

结构体NSRange

typedef  struct  _NSRange {

                  unsigned  int location;

                  unsigned  int length;

} NSRange;

可以用三种方式创建新的NSRange。

第一种,直接给字段赋值:

NSRange  range;

range.location = 17;

range.length = 4;

第二种,应用C语言的聚合结构赋值机制:

NSRange  range = { 17, 4 };

第三种方式是Cocoa提供的一个快捷函数NSMakeRange();

NSRange  range = NSMakeRange(17, 4);

 

[str  substringToIndex :number]

substringToIndex:方法创建了一个子字符串,包括首字符到指定的索引数(number)。但不包括这个字符。比如参数是3时,表示从字符串中提取字符0、1、2,并返回结构字符串对象。

 

[str  substringFromIndex :number]

substringFromIndex:方法返回了一个子字符串,它从接收者指定的索引字符开始,直到字符串的结尾。


 

 

常见的NSString方法

方法

描述

+(id) stringWithContentsOfFile : path encoding : enc error : err

创建一个新字符串,并将其设置为path指定的文件的内容,使用字符编码enc,如果非零,则返回err中的错误

+(id) stringWithContentsOfURL : url encoding : enc error : err

创建一个新字符串,并将其设置为url的内容,使用字符编码enc,如果非零,则返回err中的错误。

+(id)  string

创建一个新的字符串

+(id)  stringWithString : nsstring

创建一个新字符串,并将其设置为nsstring

+(NSString *)  stringWithFormat : format, arg1, arg2, arg3…

通过指定的format和参数arg1,arg2,arg3..创建一个新字符串

-(id)  initWithString : nsstring

将新分配的字符串设置为nsstring

-(id)  initWithContentsOfFile : path  encoding : enc error : err

将字符串设置为path指定的文件的内容

-(id)  initWithContentsOfURL : url  encoding : enc error : err

将字符串设置为(NSUrl *)url的内容,使用字符编码enc,如果非零,则返回err中的错误

-(NSUInterger)  length

返回字符串中的字符数目

-(unichar)  characterAtIndex : i

返回索引i的Unicode字符

-(NSString *)  substringFromIndex : i

返回从i开始(包括i)直到结尾的子字符串

-(NSString *)  substringWithRange : range

根据指定的范围返回子字符串

-(NSString *)  substringToIndex : i

返回从该字符串开始直到索引i(不包括i)的子字符串

-(NSComparator *)  caseInsensitiveCompare : nsstring

比较两个字符串,忽略大小写

-(NSComparator *)  compare : nsstring

比较两个字符串

-(BOOL)  hasPrefix : nsstring

测试字符串是否以nsstring开始

-(BOOL)  hasSuffix : nsstring

测试字符串是否以nsstring结尾

-(BOOL)  isEqualToString : nsstring

测试两个字符串是哦副相等

-(NSString *)  capitalizedString

返回每个单词首字母大写的字符串(每个单词的其余字母转换为小写)

-(NSString *)  lowercaseString

返回转换为小写的字符串

-(NSString *)  uppercaseString

返回转换为大写的字符串

-(const char *)  UTF8String

返回转换为UTF-8C样式的字符串

-(double)  doubleValue

返回转换为double的字符串

-(float)  floatValue

返回字符串表示的双精度浮点数

-(NSInteger *)  integerValue

返回字符串的NSInteger整数表示

-(int)  intValue

返回转换为整数的字符串

 


 

常见的NSMutableString方法

方法

描述

+(id)  stringWithCapacity : size

创建一个初始包含size字符的字符串

-(id)  initWithCapacity : size

使用初始容量为size的字符来初始化字符串

-(void)  setString : nsstring

将字符串设置为nsstring

-(void)  appendString : nsstring

在接收者的末尾附加nsstring

-(void)  deleteCharactersInRange : range

删除指定range中的字符

-(void)  insertString : nsstring  atIndex : i

以索引i为起始位置插入nsstring

-(void)  replaceCharactersInRange : range  withString : nsstring

使用nsstrng替换range指定的字符

-(void)  replaceOccurrencesOfString : nsstring  withString : nsstring2  options : opts  range : range

根据选项opts,在指定范围range中用nsstring2替换所有的nsstring。选项可以是以下值的按位或组合:NSBackwardsSearch(查找从范围尾部开始)、NSAnchoredSearch(nsstring必须匹配范围的开始)、NSLiteralString(执行逐字符比较)以及NSCaseInsensitiveSearch(忽略大小写)

 

NSArray等Foundation集合是一个Cocoa类,用来存储对象的有序列表。换言之,不能将整数这样的基本数据类型(注意:结构属于基本类型)直接存储在数组之类的集合中。如果需要存储基本数据类型(包括char数据类型),可以使用NSNumber类,它会依据这些数据的类型创建对象。

 

常用的NSArray方法

方法

描述

+(id)  arrayWithObjects : obj1, obj2, … nil

创建一个新数组,obj1、obj2,…是其元素

-(BOOL) containsObject : obj

确定数组中是否包含对象obj(使用isEqual:方法)

-(NSUInteger)  count

数组中元素的个数

-(NSUInteger)  indexOfObject : obj

第一个包含对象obj的元素索引号(使用isEqual:方法)

-(NSUInteger)  indexOfObjectPassingTest : (BOOL(^)(id obj, NSUInteger idx, BOOL *stop)) block

传递每个对象obj(带有索引号idx)到区块block中,如果obj通过测试返回YES,未通过返回NO,设置变量指针stop为YES结束处理

-(id)  lastObject

返回数组最后的对象

-(id)  objectAtIndex : i

存储在元素i的对象

-(void)  makeObjectsPerformSelector : (SEL) seletor

将seletor指示的消息发送给数组中的每个元素

-(void)  enumerateObjectsUsingBlock : (void (^) (id obj, NSUInteger idx, BOOL *stop)) block

对数组中的每个元素执行区块,传递数组中的对象obj和索引号idx,只有当所有的元素都遍历完成或设置变量指针stop为YES才处理结束

-(NSArray *)  sortedArrayUsingSelector : (SEL)selector

根据指定selector方法的比较器对数组进行排序

-(NSArray *)  sortedArrayUsingComparator : (NSComparator)  block

通过执行区块block对数组进行排序

-(BOOL)  writeToFile : path  atomically : (BOOL)flag

将数组写入指定的文件中,如果flag为YES,则先创建一个临时文件

 

常用的NSMutableArray方法

方法

描述

+(id)  array

创建一个空数组

+(id)  arrayWithCapacity : size

使用指定的初始size创建一个数组

-(id)  initWithCapacity : size

使用指定的初始size初始化新分配的数组

-(void)  addObject : obj

将对象obj添加到数组的末尾

-(void)  insertObject : obj  atIndex : i

将对象obj插入数组的i元素

-(void)  replaceObjectAtIndex :  withObject : obj

将数组中序号为i的对象用对象obj替换

-(void)  removeObject : obj

从数组中删除所有的obj

-(void)  removeObjectAtIndex : i

从数据中删除元素i,将序号为i+1的对象移至数组的结尾

-(void)  sortUsingSelector : (SEL) selector

用selector指定的比较方法将数组排序

-(void)  sortUsingComparator : (NSComparator) block

通过执行区块block对数组进行排序

注:方法removeObject:、containsObject:和indexOfObject:都依赖isEqual:策略来决定两个对象是否相等。,必要时可编写自己的isEqual:方法判断两个对象是否相同。

 

NSValue包装和展开方法

Typedef数据类型

描述

包装方法

展开方法

CGpoint

x和y值组成的点

valueWithPoint :

pointValue

CGSize

宽和高组成的尺寸

valueWithSize :

sizeValue

CGRect

矩形包含原点和尺寸

valueWithRect :

rectValue

NSRange

描述位置和大小的范围

valueWithRange

rangeValue

包装:将结构转化为对象的方式。

展开:从对象中解出基本类型。

 

常用的NSDictionary方法

方法

描述

+(id)  dictionaryWithObjectsAndKeys : obj1, key1, obj2, key2, …, nil

使用键-对象对{ key1, obj1 }、{ key2, obj2 }、…创建词典(注意,参数的顺序是:对象-键)

-(id)  initWithObjectsAndKeys : obj1, key1, obj2,  key2, …,nil

将新分配的词典初始化为键-对象对{ key1, obj1 }、{ key2, obj2 }

-(NSArray *)  allKeys

返回一个数组包含词典中所有的键

-(NSUInteger)  count

返回词典中的记录数

-(NSEnumerator *)  keyEnumerator

为词典中所有的键返回一个NSEnumerator对象

-(NSArray *)  keysSortedByValueUsingSelector : (SEL) selector

为词典中的键数组,它根据selector指定的比较方法进行排序

-(NSEnumerator *)  objectEnumerator

为词典中的所有值返回一个NSEnumerator对象

-(id)  objectForKey : key

向词典为key的键添加obj,如果key已存在,则替换该值

词典是由键-对象对组成的数据集合。词典中的键必须是单值的,通常它们是字符串,但也可以是其他对象类型。和键关联的值可以是任何对象类型,但不能是nil。

和数组对象不一样,词典对象是无序的。所以,当枚举词典时,第一个放到词典中的键-对象并不一定是第一个取出。

如果需要以字母顺序显示词典中的内容,可以先取出词典中的所有键(使用allkeys方法),对它们排序,然后按照排好序的键从词典中取出所有的值。

 

常用的NSMutableDictionary方法

方法

描述

+(id)  dictionaryWithCapacity : size

使用一个初始指定的size创建可变词典

-(id)  initWithCapacity : size

将新分配的词典初始化为指定的size

-(void)  removeAllObjects

删除词典中多有的记录

-(void)  removeObjectForKey : key

删除词典中指定key对应的记录

-(void)  setObject : obj  forKey : key

向词典为key的键添加obj,如果key已存在,则替换该值

 

常用的NSSet方法              

方法

描述

+(id)  setWithObjects : obj1, obj2, …, nil

使用一列对象创建新集合

-(id)  anyObject

返回集合中任一对象

-(id)  initWithObjects : obj1, obj2, …, nil

使用一列对象初始化新分配的集合

-(NSUInteger)  count

返回集合的成员个数

-(BOOL)  containsObject : obj

确定集合是否包含obj

-(BOOL)  member : obj

使用isEqual:方法确定集合是否包含obj

-(NSEnumerator *)  objectEnumerator

为集合中的所有对象返回一个NSEnumerator对象

-(BOOL)  isSubsetOfSet : nsset

确定接收者的每个成员是否都出现在nsset中

-(BOOL)  intersectsSet : nsset

确定接收者中是否至少有一个成员出现在对象nsset中

-(BOOL)  isEqualToSet : nsset

确定两个集合是否相等

 

常用的NSMutableSet方法

方法

描述

-(void)  addObject : obj

将对象obj添加到集合中

-(void)  removeObject : obj

从集合中删除对象obj

-(void)  removeAllObjects

删除接收者的所有成员

-(void)  unionSet : nsset

将对象nsset的所有成员添加到接收者

-(void)  minusSet : nsset

从接收者中删除nsset的所有成员

-(void)  intersectSet : nsset

将接收者中所有不属于nsset的元素删除

 

NSIndexSet的一些方法

方法

描述

+(NSIndexSet)  indexSet

创建一个空的索引集合

-(BOOL)  containIndex : idx

如果索引集合包含索引idx,则返回YES,否则返回NO

-(NSUinteger)  count

返回索引集合中索引的数量

-(NSUinteger)  firstIndex

返回集合中的第一个索引,如果集合为空,则返回NSNotFound

-(NSUinteger)  indexLessThanIndex : idx

返回集合中小于idx的最接近的索引,如果没有小于idx的索引,则返回NSNotFound,类似indexLessThanOrEqualToIndex:、indexGreaterThanIndex和indexGreaterThanOrEqualIndex:

-(NSUinteger)  lastIndex

返回集合的最后一个索引,如果集合为空,则返回NSNotFound

-(NSIndexSet *)  indexesPassingTest : (BOOL) (^) (NSUinteger idx, BOOL *stop) block

区块应用在集合中的每个元素。idx添加到了NSIndexSet中返回YES,否则返回NO;设置指针变量stop为YES,表示中断处理

注:idx是一个NSUInteger整型。

indexOfObjectPassingTest:查找到一个匹配的元素(区块至少会返回一次YES),则返回从集合匹配到的最小索引值;否则返回NSNotFound。

indexOfObjectsPassingTest:方法可从数组中查找多个匹配对象,返回包含数组中满足条件的所有元素索引的NSIndexSet对象。

 

常见的NSFileManager文件方法

方法

描述

-(NSData *)  contentsAtPath : path

从文件中读取数据

-(BOOL)  createFileAtPath : path  contents : (NSData *) data  attributes: attr

向一个文件写入数据

-(BOOL)  removeItemAtPath : path  error : err

删除一个文件

-(BOOL)  moveItemAtPath : from  toPath : to  error : err

重命名或者移动一个文件(to不能是已存在的)

-(BOOL)  copyItemAtPath: from  toPath : to  error : err

复制文件(to不能是已存在)

-(BOOL)  contentsEqualAtPath : path1  andPath : path2

比较这两个文件的内容

-(BOOL)  fileExistsAtPath : path

测试文件是否存在

-(BOOL)  isReadableFileAtPath : path

测试文件是否存在,并且是否能执行读操作

-(BOOL)  isWritableFileAtPath : path

测试文件是否存在,并且是否能执行写操作

-(NSDictionary)  attributesOfItemAtPath : path  error:  err

获取文件的属性

-(BOOL)  setAttributesOfItemAtPath : attr  error : err

更改文件的属性

注:path、path1、path2、from、to都是NSString对象;attr是一个NSDictionary对象;err是一个指向NSError对象的指针,能提供更多的错误信息。具有BOOL返回值的方法,即如果操作成功,就返回YES;否则就会返回NO。

属性字典包括各种信息,如文件的所有者、文件大小、文件的创建日期,等等。

 

常见的NSFileManager目录方法

方法

描述

-(NSString *)  currentDirectoryPath

获取当前目录

-(BOOL)  changeCurrentDirectoryPath : path

更改当前目录

-(BOOL)  copyItemAtPath : from  toPath : to  error : err

复制目录结构(to不能是已存在的)

-(BOOL)  createDirectoryAtPath : path  withIntermediateDirectories : (BOOL)flag  attributes : attr

创建一个新目录

-(BOOL)  fileExistsAtPath : path  isDirectory : (BOOL *) flag

测试文件是不是目录(flag中存储结果YES/NO)

-(NSArray *)  contentsOfDirectoryAtPath : path  error : err

列出目录内容

-(NSDirectoryEnumerator *)  enumeratorAtPath : path

枚举目录的内容

-(BOOL)  removeItemAtPath : path  error : err

删除空目录

-(BOOL)  moveItemAtPath : from  toPath : to  error : err

重命名或移动一个目录(to不能是已存在的)

 

常用的路径工具方法

方法

描述

+(NSString *) pathWithComponents:components

根据components中的元素构造有效路径

-(NSArray *) pathComponents

析构路径,获取组成次路径的各个部分

-(NSString *) lastPathComponent

提取路径的最后一个组成部分

-(NSString *) pathExtension

从路径的组后一个组成部分中提取其扩展名

-(NSString *) stringByAppendingPathComponent:path

将path添加到现有路径的末尾

-(NSString *) stringByAppendingPathExtension:ext

将指定的扩展名添加到路径的最后一个组成部分

-(NSString *) stringByDeletingLastPathComponent

删除路径的最后一个组成部分

-(NSString *) stringByDeletingPathExtension

从文件的最后一个部分删除扩展名

-(NSString *) stringByExpandingTildeInPath

将路径中的代字符扩展成用户主目录(~)或指定用户的主目录(~user)

-(NSStrng *) stringByResolvingSymlinksInPath

尝试解析路径中符号链接

-(NSString *) stringByStandardizingPath

通过尝试解析~、..(父目录符号)、.(当前目录符号)和符号链接来标准化路径

注:components是一个NSArray ,它包含路径中每一部分的字符串对象;Path是一个字符串对象,它指定文件的路径;ext是路径扩展名的字符串对象(如@”mp4”)。

 

常用的路径工具函数

函数

描述

NSString *NSUserName(void)

返回当前用户的登录名

NSString *NSFullUserName(void)

返回当前用户的完整用户名

NSString *NSHomeDirectory(void)

返回当前用户主目录的路径

NSString *NSHomeDirectoryForUser(NSString *user)

返回用户user的主目录

NSString *NSTemporaryDirectory(void)

返回可用于创建临时文件的路径目录

 

常用的iOS目录

目录

用途

Documents(NSDocumentDirectory)

用于写入应用相关数据文件的目录。在iOS中写入这里的文件能够与iTunes共享并访问,存储在这里的文件会自动备份到云端

Library/Caches(NSCachesDirectory)

用于写入应用支持文件的目录,保存应用程序再次启动需要的信息。iTunes不会对这个目录的内容进行备份。

tmp(use NSTemporaryDirectory())

这个目录用于存放临时文件,在程序终止时需要移除这些文件。当应用程序不再需要这些临时文件时,应该将其从这个目录中删除。

Library/Preferences

这个目录包含应用程序的偏好设置文件。使用NSUserDefaults类进行偏好设置文件的创建、读取和修改。

 

NSProcessInfo类方法

方法

描述

+(NSProcessInfo *) processInfo

返回当前进程的信息

-(NSArray *) argument

以NSString对象组成的形式返回当前进程的参数

-(NSDictionary *) environment

返回变量/值对词典,以描述当前的环境变量(比如PATH和HOME)及其值

-(int) processIdentifier

返回进程标识符,它是操作系统赋予进程的唯一数字,用于识别每个正在运行的进程

-(NSString *) processName

返回当前正在运行的进程

-(NSString *) globallyUniqueString

每次调用这个方法时,都返回不同的单值字符串。可以用这个字符串生成单值临时文件名

-(NSString *) hostName

返回主机系统的名称

-(NSUInteger *) operatingSystem

返回表示操作系统的数字

-(NSString *) operatingSystemName

返回操作系统的名称

-(NSString *) operatingSystemVersionString

返回操作系统的当前版本

-(NSString *) setProcessName:(NSString *)name

将当前进程名称设置为name。应该谨慎地使用这个方法,因为关于进程名称存在一些假设(比如用户默认的设置)。

 

常用的NSFileHandle方法

方法

描述

+(NSFileHandle *) fileHandleForReadingAtPath:path

打开一个文件准备读取

+(NSFileHandle *) fileHandleForWritingAtPath:path

打开一个文件准备写入

+(NSFileHandle *) fileHandleForUpdatingAtPath:path

打开一个文件准备更新(读取和写入)

+(NSFileHandle *) availableData

从设备或者通道返回可用的数据

-(NSData *) readDataToEndOfFile

读取其余的数据直到文件的末尾(最多UINT_MAX字节)

-(NSData *) readDataOfLength:(NSUInteger)bytes

从文件中读取指定字节的内容

-(void) writeData:data

将data写入文件

-(unsigned long long) offsetInFile

获取当前文件的偏移量

-(void) seekToFileOffset:offset

设置当前文件的偏移量

-(unsigned long long) seekToEndOfFile

将当前文件的偏移量定位到文件的尾

-(void) truncateFileAtOffset:offset

将文件的长度设置为offset字节(如果需要,可以填充内容

-(void) closeFile

关闭文件

注:fh是一个NSFileHandle对象;data是一个NSData对象;path是一个NSString对象,offset是一个unsignedlong long。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值