• 这几天学习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);
            */

  • 相关阅读:
    [bzoj1468]Tree(点分治)
    [bzoj1087]: [SCOI2005]互不侵犯King(状压dp)
    [hdu5628]Clarke and math(dirichlet卷积)
    [bzoj1036]:[ZJOI2008]树的统计Count(树链剖分)
    [bzoj1026][SCOI2009]windy数(前缀和+数位dp)
    洛谷 P1714 切蛋糕(dp+RMQ)
    [hdu3507] Print Article
    [bzoj1597]: [Usaco2008 Mar]土地购买
    php基础二
    php基础
  • 原文地址:https://www.cnblogs.com/xinye/p/2654498.html
Copyright © 2020-2023  润新知