这几天学习Objective的笔记

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、NO
7、在类的@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、bool

38、[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和length
NSRange range = [str3 rangeOfString : @"Worl"];//如果没有截取到,则location=NSNotFound
NSLog(@"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 : %@",(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 %@",contents);
        */

原文地址:https://www.cnblogs.com/xinye/p/2654498.html