zoukankan      html  css  js  c++  java
  • Objective C 总结(七):Foundation Kit中的常类型

    Objective-C是C的超集,C中的类型和操作在Objective-C中都是可用的。

    Foundation 框架提供了一些常用的struct。struct是值类型

    1. NSRance
      typedef struct _NSRange 
      {
          unsigned int location;
          unsigned int length;
      } NSRange;

      第一种初始化方法

      NSRange range;
      range.location = 11;
      range.length = 55;

      第二种方法

      NSRange range = {17, 55};

      第三种方法,使用框架提供的C函数,这种编程方式在objective-c开发中大量的使用了

      NSRange range = NSMakeRange(11, 55);
    2. NSPoint
      typedef struct _NSPoint
      {
          float x;
          float y;
      } NSPoint;
    3. NSSize
      typedef struct _NSSize 
      {
          float width;
          float height;
      } NSSize;
    4. NSRect
      typedef struct _NSRect
      {
          NSPoint origin;
          NSSize size;
      } NSRect;

      上面的结构都提供了快捷C函数,NSMakePoint(x,y),NSMakeSize(width,height),NSMakeRect(x,y,width,height)

    字符串

    NSString-不可变字符串和NSMutableString可变字符串,框架中大量的类提供的不可变版本和可变版本。如NSArray和NSMutableArray,NSDictionary和NSMutableDictionary,NSSet和NSMutableSet.

    1. 创建
      NSString *name = @"Bob";
      NSString *name = [[NSString alloc] initWithFormat: @"My name is %@", @"Bob"];
      NSString *name = [NSString stringWithFormat: @"My name is %@", @"Bob"];
      NSString *name = [NSString stringWithUTF8String: "My name is Bob“];
    2. 比较
      比较内容的相等用
      - (BOOL) isEqualToString: (NSString *) aString;

      注意下面这样比较的是对象

      if(aString == bString)
      - (NSComparisonResult) compare: (NSString *)string;
      - (NSComparisonResult) compare: (NSString *)string
                                       options: (unsigned int) mask;
      typedef enum _NSComparisonResult
      {
          NSOrderedAscending = -1,
          NSOrderedSame,
          NSOrderedDescending
      } NSComparisonResult;
      NSMutableString提供了追加、删除、替换等的方法。
      - (void) appendString: (NSString *) aString;
      - (void) appendFormat: (NSString *) format;
      - (void) deleteCharactersInRange: (NSRange) range;

    集合

    集合中只能存储引用对象,如要存储基本类型需要用NSNumber将它们先装箱。集合中不能存储nil,初始化时以nil结束。

    1. NSArray, 顺序集合,它分配一块连续的内存区域
      初始化方法,
      + (id)arrayWithObject:(id)anObject;
      + (id)arrayWithObjects:(id)firstObject, ...;
      - (id)initWithObjects:(id)firstObject, ...;
      NSArray *someArray =
        [NSArray arrayWithObjects: firstObject, secondObject, thirdObject, nil];
      NSArray *someArray = @[firstObject, secondObject, thirdObject];

      查询

          NSUInteger numberOfItems = [someArray count]; 
          if ([someArray containsObject:someString]) {
              ...
          }
          // 访问对象
          if ([someArray count] > 0) {
              NSLog(@"First item is: %@", [someArray objectAtIndex:0]);
          }
          // 用下标方式访问对象
          if ([someArray count] > 0) {
              NSLog(@"First item is: %@", someArray[0]);
          }

      排序

      NSArray *unsortedStrings = @[@"gammaString", @"alphaString", @"betaString"];
          NSArray *sortedStrings =
                       [unsortedStrings sortedArrayUsingSelector:@selector(compare:)];

      可变数组

      NSMutableArray *mutableArray = [NSMutableArray array];
      [mutableArray addObject:@"gamma"];
      [mutableArray addObject:@"alpha"];
      [mutableArray addObject:@"beta"];
       
      [mutableArray replaceObjectAtIndex:0 withObject:@"epsilon"];

      [mutableArray sortUsingSelector:@selector(caseInsensitiveCompare:)];
    2. NSSet 非顺序集合,存储不重复对象的集合,用法与NSArray一样
    3. NSDictionary 字典,以key-value对的方式存储的数据结构
      创建
         NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                         someObject, @"anObject",
                   @"Hello, World!", @"helloString",
                                @42, @"magicNumber",
                          someValue, @"aValue",
                                   nil];
          NSDictionary *dictionary = @{
                        @"anObject" : someObject,
                     @"helloString" : @"Hello, World!",
                     @"magicNumber" : @42,
                          @"aValue" : someValue
          };

      查询

         NSNumber *storedNumber = [dictionary objectForKey:@"magicNumber"];

      可变字典

      [dictionary setObject:@"another string" forKey:@"secondString"];
      [dictionary removeObjectForKey:@"anObject"];

      NSNull可作为空值存储到集合中,它只有一种用法[NSNull null],表示空对象,nil则表示空地址

         NSArray *array = @[ @"string", @42, [NSNull null] ];
          for (id object in array) {
              if (object == [NSNull null]) {
                  NSLog(@"Found a null object");
              }
          }

    快速枚举器:for(),用于遍历集合,但不能修改集合中对象的值,用法

     for (id object in array) {
            if (object == [NSNull null]) {
                NSLog(@"Found a null object");
            }
        }

    各种数值包装类

    1. NSNumber,对基本类型的对象形式装箱(即作为对象存储到heap中),拆箱即获取原来的值
          NSNumber *magicNumber = [[NSNumber alloc] initWithInt:42];
          NSNumber *unsignedNumber = [[NSNumber alloc] initWithUnsignedInt:42u];
          NSNumber *longNumber = [[NSNumber alloc] initWithLong:42l];
       
          NSNumber *boolNumber = [[NSNumber alloc] initWithBOOL:YES];
       
          NSNumber *simpleFloat = [NSNumber numberWithFloat:3.14f];
          NSNumber *betterDouble = [NSNumber numberWithDouble:3.1415926535];
       
          NSNumber *someChar = [NSNumber numberWithChar:'T'];

      上面实例方法都提供了对应的类方法,下面是快速语法

          NSNumber *magicNumber = @42;
          NSNumber *unsignedNumber = @42u;
          NSNumber *longNumber = @42l;
       
          NSNumber *boolNumber = @YES;
       
          NSNumber *simpleFloat = @3.14f;
          NSNumber *betterDouble = @3.1415926535;
       
          NSNumber *someChar = @'T';

      拆箱

       int scalarMagic = [magicNumber intValue];
          unsigned int scalarUnsigned = [unsignedNumber unsignedIntValue];
          long scalarLong = [longNumber longValue];
       
          BOOL scalarBool = [boolNumber boolValue];
       
          float scalarSimpleFloat = [simpleFloat floatValue];
          double scalarBetterDouble = [betterDouble doubleValue];
       
          char scalarChar = [someChar charValue];

      NSNumber是不可变的。

    2. NSValue 对结构类型的装箱
      NSRect rect = NSMakeRect(1,2,30,40);
      
      NSValue *value = [NSValue valueWithBytes: &rect
                                           objCType: @encode(NSRect)];

      拆箱

      [value getValue: &rect];

      对于常见的结构框架已封闭好了方法

      + NSValue *)valueWithPoint: (NSPoint) point;
      + (NSValue *) valueWithSize: (NSSize) size;
      
      - (NSPoint) pointValue;
      - (NSSize) sizeValue;
  • 相关阅读:
    Eclipse Plugin for Hadoop
    Hadoop伪分布模式配置
    Hadoop单机模式配置
    20180711-Java Number类
    20180711-Java分支结构 – if…else/switch
    20180709-Java循环结构
    20180708-Java运算符
    20180708-Java修饰符
    20180708-Java变量类型
    20180705-Java对象和类
  • 原文地址:https://www.cnblogs.com/iprogrammer/p/3246242.html
Copyright © 2011-2022 走看看