1、一个类的定义一般分成两部分:
@interface 部分 1、确定这个类继承自谁,使用冒号":" 2、确定拥有的数据,包括在"{}"中 3、确定可以执行的动作 - 实例方法 + 类方法 4、以@end结尾 @implementation部分 2、程序中有GC机制,但是最好自己管理内存。IPhone等也不支持GC。3、OC中一般get方法的名称和对应的属性的名称相同。4、OC中的模运算只支持整数运算。5、通过键盘输入值: int num = 0; NSLog(@"Please input a number,type is integer!!!"); scanf("%i",&num);6、OC中的bool类型表示: 真值:非0数字、TRUE、true、YES 假值:0、FALSE、false、NO7、在类的@implementation一般不会重复声明实例变量(虽然可以这么做),在其他地方引用的时候一班都会引用头文件而不是@implementation文件。8、import中使用<>和""的区别是:<>首先查找系统头文件,而""首先在当前目录下查找。9、@property 属性名称1,属性名称2,...;在@interface文件中声明属性的setter和getter @synthesize 属性名称1,属性名称2,...;在@implementation文件中实现默认的setter和getter 以上的指令只是针对基本类型。10、OC中可以通过"实例名.属性名"来访问属性。11、方法的声明 修饰符(-/+) (返回类型或void) 方法名第一部分:(类型) 参数名称 方法名第二部分:(类型) 参数名称 方法名第三部分:(类型) 参数名称 ...... { 方法体 } 可以省略方法名称除了第一部分之外的所有的部分。如果方法的参数类型或者返回值是引用类型,需要在类型名称后添加一个* 修饰符(-/+) (返回类型或void) 方法名第一部分:(类型) 参数名称 :(类型) 参数名称 :(类型) 参数名称 ...... { 方法体 }12、局部变量没有初始值,在声明的时候必须给予赋值。方法的参数是局部变量,方法没有办法修改方法的参数。13、一般将static变量生命在@implementation的外面,这样类中的所有的方法和属性都可以访问它。14、self关键字调用自己的方法或者变量。15、OC中使用的坐标系是笛卡尔坐标是,即一个图形的左下定点是这个图形的原点(0,0)。16、@class指令可以代替import "类名称.h",这样会提高效率,因为让引用这个类的类知道它是一个方法而已; 如果要引用这个类中的方法则需要使用import,这样才能知道这个类中的方法、变量等。17、重写dealloc方法,释放本身内存,并调用[super release]。18、在新建一个对象的时候需要首先判断是不是nil,如果不为nil,则需要先进行一次内存的释放。19、多态:来自不同类的对象可以共享名称相同的方法; 动态类型:直到执行的时候才知道对象所属的类型 动态绑定:直到执行的时候才知道方法所属的对象20、处理动态类型的方法:-(BOOL) isKindOf:class-object 对象是不是class-object或其子类的成员-(BOOL) isMemberOfClass:class-object 对象是不是class-object的成员-(BOOL) respondsToSelector:selector 对象能否相应selector所指定的方法+(BOOL) instancesRespondToSelector:selector 指定的类实例是否能响应selector+(BOOL) isSubclassOfClass:class-object 对象是指定类的子类吗-(id) performSelector:selector 应用selector指定的方法-(id) performSelector:selector withObject:object 应用selector指定的方法,传递参数object-(id) performSelector:selector widthObject:object1 widthObject:object2 应用selector指定的方法,传递参数object1和object2获取class-object:[类名称 class]或者[对象名称 class]获取selector:可以对一个方法名应用@selector指令:@selector(方法名称),注意方法名称中的冒号":"selector的返回值是一个SEL类型的。21、异常处理:发生异常不会终止程序,而是跳转到catch中进行处理。@try{ statement; statement;}@catch(NSException *exception){ statement; statement; NSLOg(@"name:%@,reason:%@",[exception name],[exception reason]);}@throw 抛出自己的异常可以使用 @finally 语句块包含是否执行抛出异常的 @try 块。22、初始化方法例子:- (Person *) initWithName:(NSString *) name AndCompany : (NSString *) company{ self = [super init]; if(self){ [self setName:@"zhangsan" company:@"lenovo"]; } return self;}23、实例变量的访问作用域: @protected:可以被当前类以及子类的任何方法进行引用,这个也是默认情况。 @private:只可以被当前类的方法引用,子类以及其他类无法引用。 @public:可以被当前类、子类、以及其他模块的方法进行引用。 @package:对于64位图像可以在实现该类的图像的任何地方访问这个实例变量。24、定义在一个类的源文件的所有的方法、属性、类之前的变量叫做全局变量,可以被其他模块和本模块进行访问。例如在A类中声明: int numA = 1000; 在其他类使用这个全局变量的时候,应该声明一下这个变量,需要在前面添加一个extern关键字。例如在B类中:extern int numA;(此处只要声明不要赋值,否则会有警告) 如果全局变量在声明类中使用,则不需要添加一个extern关键字。25、static的变量定义在所有的函数之外,但不能被其他模块进行访问,只能在当前声明它的模块进行使用。26、auto关键字与static相反,是实例变量与实例方法的默认声明方式,并且没有人使用它。27、const用来修饰一个常量,声明之时必须给予初始化,并且在声明后不可以进行修改值的操作,否则会报错。28、volatile与const相反,说明这个被修饰的量是一个变量,避免编译器优化掉看似多余的变量赋值,同时避免重复检查没有值变化的变量。29、typedef语句:typedef 类型名称 自定义的类型名称。30、分类:#import "类名称.h"@interface 类名称 (分类名称){ }#improt "类名称.h"@implementation 类名称 (分类名称){ }注意点:不能新定义实例变量、最好不要类中的方法、必须和类名称保持一致、可以不实现分类中的所哟肚饿方法。31、协议:多个类共享的一个方法列表。协议中的方法没有相应的实现,由他人来进行实现。如果决定要实现协议中的所有方法就意味着要遵守(confirm to)或采用(adopt)这项协议。定义: @protocol 协议名称 // @optional 之后定义的方法可以不必实现 // @required 之后的定义的方法必须实现 @end采用一个协议: @interface 类名称 : 实现类 <协议名称1,协议名称2,协议名称3,...> @end判断一个对象是否采用了一个协议: if([对象名称 confirmsTo : @protocol (协议名称)] == YES){ // @protocol (协议名称) 会得到协议名称并返回一个Protocol的对象 }让编译器帮助检查是否遵循某项协议: id<协议名称> 对象名称;如果没有遵循指定的协议名称会有警告信息。协议和分类都可以遵守一个协议。非正式协议实际上就是一个分类,可以不实现非正式协议的方法。在Objective-C 2.0中使用 @optional指令代替了非正式协议。32、预处理指令: #define 名称 值 (执行文本替换) 例子:#define IS_LEAP_YEAR(y) y % 400 == 0 || (y % 4 == 0 || \ y % 100 != 0)33、NSInteger不是类,而是一个基本类型的typedef。34、NSArray中只能存放对象而不能存放基本类型。35、创建一个NSNumber类型的对象:NSNumber *numberInteger = [NSNumber numberWithInteger : 100];36、有一个NSNumber得到一个NSInteger:NSInteger numbetInt = [numberInteger integerValue];37、numberWithXXX:得到NSNumber对象(类方法) initWithXXX:给NSNumber对象赋予初值(实例方法) YYYValue:得到NSXXX类型数据(实例方法) 其中XXX有:Integer、UnsignedInteger、 Int、UnsignedInt、 Short、UnsignedShort、 LongLong、UnsignedLongLong、 Long、UnsignedLong、 Char、UnsignedCha、 Float、Double、Bool YYY有:integer、unsignedInteger、 int、unsignedInt、 short、unsignedShort、 longlong、unsignedLong、 long、unsignedLong、 char、unsignedChar、 float、double、bool38、[NSNumber对象 isEqualToNumber:NSNumber对象]:判断两个数值对象是否相等
39、[NSNumber对象 compare:NSNumber对象]:比较两个对象是大小,返回值类型是NSComparisonResult: 如果小于:NSOrderedAscending; 大于:NSOrderedDescending; 等于:NSOrderedSame; 40、常用的@"XXX"是NSConstantString的对象,这个类是NSString的子类: NSConstantString *str = @"Hello World!!!"; NSLog(str); [str release];41、 %@: NSLog();函数中打印对象。42、NSString以及NSConstantString都属于不可变字符串,而NSMutableString属于可变字符串。43、[str1 stringByAppendingString : str2]:把str2追加到str1,并返回追加后的字符串 [str1 uppercaseString]:转换成大写并返回转换后的字符串,没有改变原来字符串的内容 [str1 lowercaseString]:转换成小写并返回转换后的字符串,没有改变原来字符串的内容 [NSString stringWithString : str1]:通过一个字符串返回一个字符串。 [str1 compare:str2]:比较两个字符串内容是否相等,区分大小写! [str1 caseInsensitiveCompare : str2]:比较两个字符串是否相等,不区分大小写! [str1 substringFromString : 3]:从第4个字符开始截取字符串到字符串末尾,并返回截取结果 [str1 substringToString : 7]:从第一个字符开始截取到第八个字符,并返回截取结果 [str3 substringWithRange : NSMakeRange(1,3)]:从第二个字符串开始截取3个字符串44、NSRange数据结构:两个变量location和lengthNSRange range = [str3 rangeOfString : @"Worl"];//如果没有截取到,则location=NSNotFoundNSLog(@"range.location:%i,range.length:%i",range.location,range.length);
45、NSMutableString
NSMutableString *ms; ms = [NSMutableString stringWithString : str1]; [ms insertString:@" 'Huo Xing' " atIndex:5]; [ms insertString:@" 'Append in Last~~~~' " atIndex:[ms length]]; [ms appendString : @" append String "]; [ms deleteCharactersInRange : NSMakeRange(10,15)];NSRange range = [ms rangeOfString : @"Hello "];
if(range.location != NSNotFound){ NSLog(@"range location:%i,length:%i",range.location,range.length ); }else{ NSLog(@"location not found!!!"); } [ms setString:@"ZhongGuo"]; [ms replaceCharactersInRange : NSMakeRange(2,2) withString : @" Chinese "];46、[ms replaceOccurrencesOfString:@"Chinese"
withString:@"China" options:nil range:NSMakeRange(0,[ms length])];47、NSMutableArray是NSArray的子类,前者可变,后者不可变。48、NSArray: NSArray *array = [NSArray arrayWithObjects:@"First",@"Second",@"Third",@"Fourth",@"Fifth",nil]; for(int i = 0;i < 5;i++){ NSLog(@"%i : + 1),[array objectAtIndex:i]); }49、MAC目录: ~ 用户主目录 . 当前目录 .. 上一级目录50、文件操作:NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL isRemoveSuc = [fileManager removeFileAtPath : @"D:\\demo01.txt" handler:nil]; if(isRemoveSuc){ NSLog(@"remove file at path is success"); }else{ NSLog(@"remove file at path is fail"); } NSString *fileName = @"D:\\testfile.txt"; if([fileManager fileExistsAtPath : fileName] == NO){ NSLog(@"special file is not exists!!!"); }else{ NSLog(@"special file is exists!!!"); if([fileManager copyPath:fileName toPath : @"D:\\testfile02.txt" handler: nil] == YES){ NSLog(@"copyPath:toPath:handler: is success"); }else{ NSLog(@"copyPath:toPath:handler: is fail"); } if([fileManager contentsEqualAtPath:fileName andPath:@"D:\\testfile02.txt"] == YES){ NSLog(@"testfile02.txt contents equal testfile01.txt"); }else{ NSLog(@"testfile02.txt contents not equal testfile01.txt"); } if([fileManager contentsEqualAtPath:fileName andPath:@"D:\\testfile03.txt"] == YES){ NSLog(@"testfile03.txt contents equal testfile01.txt"); }else{ NSLog(@"testfile03.txt contents not equal testfile01.txt"); } if([fileManager movePath : @"D:\\testfile02.txt" toPath:@"D:\\testfile04.txt" handler:nil] == YES){ NSLog(@"movePath:toPath: is success"); }else{ NSLog(@"movePath:toPath: is fail"); }NSDictionary *attrs = [fileManager fileAttributesAtPath : fileName traverseLink:NO];
NSLog(@"file size is %i bytes!",[[attrs objectForKey : NSFileSize] intValue]);/* NSString *contents = @"kd";
contents = [NSString initWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:nil]; NSLog(@"D:\\\\testfile.txt contents is : \n ); */