• Foundation框架基本数据类型


    NSNubmer

    NSNumber是一个类,该类中存在多种处理数值的方法,可直接创建该类的实例变量

     1 // 定义3个NSNumber类型的变量
     2 NSNumber *myNumber, *floatNumber, *intNumber
     3 
     4 // 顶一个一个NSInteger的变量,NSInteger不是对象,而是使用typedef定义的一种数据类型
     5 NSInteger myInt
     6 
     7 // 实例化一个NSNumber类,并为其设定一个100的整形数值,将这个类实例赋给intNumber
     8 intNumber = [NSNumber numberWithInteger:100];
     9 
    10 // 调用NSNumber类中的integerValue方法获取整数值赋值给NSInteger类型变量myInt
    11 myInt = [intNumber integerValue];

    在上述例子中,integerValue只能获取integer类型的变量。

    也可以通过手动分配内存的方式创建NSNumber类实例,如:

    1 // 创建一个包含整数类型,值为50的NSNumber实例变量
    2 NSNumber *myNumber = [[NSNumber alloc] initWithInt: 50];

    注意,通过手动分配内存方式创建NSNumber实例变量的实例不能修改其值,否则会报错。

    NSString

    在Object-c中创建一个字符串变量非常简单,如:@"program "

    但是注意,这里的字符串变量是常量,即一旦定义后,就不可以改变其值。它实际上是NSConstantString类的实例,该类是NSString的子类。

    在NSLog中,可以通过%@来输出一个字符串常量

    1 NSString *myStr = @"this is a string";
    2 NSLog(@"%@", myStr);

    %@不仅仅可以显示字符串,还可以用它来打印一个对象。

    当用%@来打印一个对象时,该对象会自动调用description方法,默认会打印出该对象的类名,以及该对象在内存中的地址,可以通过重写description方法来更改这一默认行为。

    1 NSString *str1 = @"string1";
    2 NSString *str2 = @"string2";
    3 NSString *ref;
    4 
    5 ref = [NSString stringWithString: str1];
    6 str1 = [str1 uppercaseString];
    7 str2 = [stringByAppendingString: str1];
    8 ref = [str2 uppercaseString];

    上述代码首先创建了3个NSString类型的常量变量

    当更改其中任意一个常量值的时候,其实是更新了该类型所自定的内存地址,即指向了新的地址从而达到更新值的效果。

    [NSString stringWithString: str1];

    该语句会真是的去创建一个新的对象,该对象中值的地址会指向str1的内存地址

    ref = str1;

    只是简单的创建了一个指向str1对象的内存地址指针

    注,上述所说的常量是指存储在内存中的值是常量,即存储在内存中的string1和string2是不可变更,而str1、str2和ref所指向的内存地址是可变的。在上述各个变更值的过程其实是创建了一个新的NSString对象并对其进行初始化操作。

    第五行中系统创建一个新的对象并初始化其值为str1所指向的值赋给ref

    第八行同样也是创建一个新的对象,但此时第五行创建的内存已经无法被引用了,不过不必担心,系统会自动对其销毁。

    在NSString类中,一些方法在调用或返回时需要提供一个范围参数,Object-C提供了一种特殊类型:NSRange,这种类型实际上是定义的一个结构,该结构含有两个元素:location和length。这两个元素都是NSUinteger类型的变量。

    1 subRange = [str1 rangeOfString: @"string A"]; 
    2 NSLog (@"String is at index %lu, length is %lu", subRange.location, subRange.length);

    可通过NSMutableString类创建一个字符可变的对象,该类属于NSString的子类,所以该类的实例可以调用NSString类中定义的所有方法。

    这里所说的可变指的是真正更改内存中存储的值

     1 #import <Foundation/Foundation.h>
     2 int main (int argc, char * argv[]) {
     3     @autoreleasepool {
     4         NSString *str1 = @"This is string A"; 
     5         NSString *search, *replace;
     6         NSMutableString *mstr;
     7         NSRange substr;
     8         // Create mutable string from nonmutable
     9         mstr = [NSMutableString stringWithString: str1]; 
    10         NSLog (@"%@", mstr);
    11         // Insert characters
    12         [mstr insertString: @" mutable" atIndex: 7];
    13         NSLog (@"%@", mstr);
    14         // Effective concatentation if insert at end
    15         [mstr insertString: @" and string B" atIndex: [mstr length]];
    16         NSLog (@"%@", mstr);
    17         // Or can use appendString directly
    18         [mstr appendString: @" and string C"];
    19         NSLog (@"%@", mstr);
    20         // Delete substring based on range
    21         [mstr deleteCharactersInRange: NSMakeRange (16, 13)];
    22         NSLog (@"%@", mstr);
    23         // Find range first and then use it for deletion
    24         substr = [mstr rangeOfString: @"string B and “];
    25         if (substr.location != NSNotFound) { 
    26             [mstr deleteCharactersInRange: substr];
    27              NSLog (@"%@", mstr);
    28         }
    29         // Set the mutable string directly
    30         [mstr setString: @"This is string A"];
    31         NSLog (@"%@", mstr);
    32         // Now let’s replace a range of chars with another
    33         [mstr replaceCharactersInRange: NSMakeRange(8, 8) withString: @"a mutable string"];
    34         NSLog (@"%@", mstr); // Search and replace
    35         search = @"This is"; replace = @"An example of";
    36         substr = [mstr rangeOfString: search];
    37         if (substr.location != NSNotFound) {
    38             [mstr replaceCharactersInRange: substr withString: replace];
    39             NSLog (@"%@", mstr);
    40         }
    41         // Search and replace all occurrences
    42         search = @"a"; replace = @"X";
    43         substr = [mstr rangeOfString: search];
    44         while (substr.location != NSNotFound)
    45         {
    46             [mstr replaceCharactersInRange: substrwithString: replace];
    47             substr = [mstr rangeOfString: search];
    48         }
    49         NSLog (@"%@", mstr);
    50     }
    51     return 0; 
    52 }

    行6创建了一个NSMutableString类型实例变量mstr

    行9将mstr指向的内存中的值设置为str1所指向的内存地址中所存储的值。当stringWithString方法返回给一个NSMutableString类型变量时会返回一个值可变的对象,而该方法返回给一个NSString类型变量时,返回的是一个值不可变的对象。

    行12在mstr字符串中的指定位置插入给定的字符串,该方法没有返回值,因为它直接对mstr对象进行操作。

    NSArray

  • 相关阅读:
    VSCode创建Vue项目完整教程
    npm安装vue,在vue/dist目录下没有产生vue.js文件 npm init y npm install vue@2
    技巧心得:DOS学习心得(一)
    c# winform 在新的应用程序域运行 wpf
    Vi下如何保存退出
    visio 文件VSD转jpg
    Too many open files的四种解决办法
    C# winform 窗体弹出选择目录或文件 的对话框
    https://gitee.com/antdesignblazor
    类型Microsoft.Office.Interop.Excel.ApplicationClass未定义构造函数
  • 原文地址:https://www.cnblogs.com/gbyukg/p/3281766.html
Copyright © 2020-2023  润新知