IOS学习笔记之十一(包装类、description、isequal)

137 阅读2分钟

1、下面的类不是包装类

1)、NSInteger(64 位相对于 long)

2)、NSUInteger(64 位相对于 unsigned long)

3)、CGFLoat(64 位相对于 double, 32 位相对于 float)

2、下面类是包装类

1)、NSValue

NSValue 是 NSNumber 的父类

2)、NSNumber

一般方法

+numberWith***:把指定类型包装成 NSNumber

-initWith***: 先需要创建 NSNumber 对象, 然后再用一个基本类型的值来初始化 NSNumber.

-xxxValue: 返回该 NSNumnber 对象包装的基本类型值

3、description 方法

这个方法有点类似 java 里面的 toString 方法,需要重写,直接打印对象,会默认调用这个方法,这里和 java 有点类似, 返回字符串格式如下

<类名 [实例变量 1 = 值 1,类名 [实例变量 2 = 值 2, …]>

4)、== 和 equals

== 比较基本类型,如果比较对象,就是比较对象的内存地址,地址相同才返回 1

Equals 方法一般需要重写,和 java 里面有点类似,我们一般用来比较字符串,因为 NSString 里面重写了这个方法,java 里面的 String 也重写了这个方法,但是字符串常量池需要注意,如果指针指向字符串常量池,而且地址一样,我们用 == 比较会返回真, 这里 java 和 ios 都一样, 如下

NSString *s1 = @“hello”;
 
NSString *s2 = @“hello”;
 
S1==s2,这里返回1

5、简单测试 demo

        NSNumber *num = [NSNumber numberWithInt:20];
        NSNumber *dou = [NSNumber numberWithDouble:4.5];
        NSNumber *ch = [[NSNumber alloc] initWithChar:'h'];
        NSLog(@"%d", [num intValue]);
        NSLog(@"%g", [dou doubleValue]);
        NSLog(@"%@", ch);
        NSLog(@"%c", [ch charValue]);
        
        MyApple *apple = [[MyApple alloc] initWithColor:@"red" weight:5.6];
        NSLog(@"%@", apple);
        
        NSString *s1 = [NSString stringWithFormat:@"chenyu"];
        NSString *s2 = [NSString stringWithFormat:@"chenyu"];
        NSLog(@"s1 == s2 is %d", s1 == s2);
        NSLog(@"s1 equals s2 %d", [s1 isEqual:s2]);
        
        NSString *s3 = @"hello";
        NSString *s4 = @"hello";
        NSLog(@"s3 == s4 is %d", s3 == s4);
        NSLog(@"s1 == s3 is %d", s1 == s3);

6、运行结果

20
4.5
104
h
<MyApple[color=red, weight=5.6]>
s1 == s2 is 1
s1 equals s2 1
s3 == s4 is 1
s1 == s3 is 0