ios开发第一天-包装类

oc是面向对象的语言,与java类似,由于存在int,double,float等类型,因此,提供了NSValueNSNumber来封装c语言中的基本类型。

注意:

NSInteger,NSUInteger,CGFloat这些是利用typedef定义的新类型,其并不是类,仍然是基本类型。

NSValue与NSNumber

其中,NSValue是NSNumber的父类,两者都是包装类,NSValue更加通用,宽泛,其可以包装short,int,float,double,char,对象id等,包装以后,其便可以添加到NSArray,NSSet等集合中。相反,NSNumber更加具体,其主要用于包装C语言中的各种数值类型。

NSNumber主要包含了如下的3类方法:

1、+ numberWithXxx:该方法直接将特定类型的值包装成NSNumber;

2、- initWithXxx:该实例方法需要先创建一个NSNumber对象,再用一个基本类型来初始化;

3、- xxxValue:该实例方法返回该NSNumber对象包装的基本类型的值。

案例代码:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSNumber* num=[NSNumber numberWithInt:20];
        NSNumber* de=[NSNumber numberWithInt:3.4];
        NSLog(@"%d",[num intValue]);
        NSLog(@"%g",[de doubleValue]);
        NSNumber* ch=[[NSNumber alloc]initWithChar:'J'];
        NSLog(@"%c",[ch charValue]);
        
    }
    return 0;
}


处理对象:

Object-c对象都是NSObject子类的实例,所以可以直接调用该类中定义的方法。description方法是NSObject类的一个实例方法,所有的Object-C类都是NSObject的子类,因此,所有的Object-C对象都具有description方法。description方法类似于Java中的toString方法,用于自我描述。

当利用NSLog(@"%@",xxx)输出一个对象时,起输出此对象的描述信息,默认为《对象名:12位16进制数》;

通常在程序中用于打印出对象的状态,所以利用如下的格式:

《类名:[实例变量1=xxx,实例变量2=xxx]》。

案例代码:

LWBApple.h文件:

#import <Foundation/Foundation.h>

@interface LWBApple : NSObject
@property (nonatomic,copy)NSString* color;
@property(nonatomic,assign)double weight;
-(id) initWithColor:(NSString*)color weight:(double)weight;
@end


LWBApple.m

#import "LWBApple.h"

@implementation LWBApple

@synthesize color=_color;
@synthesize weight=_weight;

-(id) initWithColor:(NSString*)color weight:(double)weight {
    if (self=[super init]) {
        self.color=color;
        self.weight=weight;
    }
    return self;
}
-(NSString*) description{
    return [NSString stringWithFormat:@"<LWBApple[_color=%@,_weight=%g]>",self.color,self.weight];
}
@end
main.m

#import <Foundation/Foundation.h>
#import "LWBApple.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        LWBApple* apple=[[LWBApple alloc]initWithColor:@"白色" weight:2.78];
        NSLog(@"%@",apple);
    }
    return 0;
}


结果:


==和isEqual方法

OC用来测试两个变量是否相等的两种方式,一种是利用==运算符,另一种是利用isEqual方法。

对于“==”来说,如果是数值类型,则只要两个变量的值相等(不一定要求数据类型严格相同),使用==判断就讲返回YES;而对于两个指针类型的变量,它们必须返回同一个对象(即两个指针变量保存的内存地址相同)时,==判断才会返回真。没有继承关系的两个指针变量会提示警告或者编译错误。

注意:@“hello”和[NSString stringWithFormat:@"hello"]所返回的地址是不同的,而且存储方式也是不一样的。其中,@“hello”就是C语言中的字符串常量加上@符号,保存在常量池中。而利用NSString方法生成的字符串起是存储在堆中。

案例程序如下:

#import <Foundation/Foundation.h>
#import "LWBApple.h"

int main(int argc, const char * argv[]) {
    NSString* s1=@"天气晴朗";
    NSString* s2=@"天气晴朗";
    NSString* s3=[NSString stringWithFormat:@"天气晴朗"];
    NSString* s4=[NSString stringWithFormat:@"天气晴朗"];
    NSLog(@"s1与s2==%d",s1==s2);
    NSLog(@"s3与s4==%d",s3==s4);
    NSLog(@"s1==%p\n s2==%p\n s3==%p s4==%p",s1,s2,s3,s4);
    
   
    return 0;
}
结果:

注意:在程序中的%p表示输出指针所指示的地址,利用0x01xxxxxl来表示。

常量池保证相同的字符串直接量只有一个,不会产生多个副本。

对于isEqual方法来说,对于字符串,并不要求两个指针变量所指示的地址相等,而是要求所指示的内容相同,此时,利用isEqual来表示。[str isEqual str2]l.

NSString重写了NSObject的isEqual方法,其判断标准是只要两个字符串所包含的字符序列相同,通过isEqual比较将返回真,否则返回假。因此,我们可以重写isEqual方法来实现比较。

判断一个实例是否属于某一个类,利用isMemberOfClass成员方法,其实NSObject的一个方法,如果属于则返回true。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值