ios开发第一天-包装类

来源:互联网 发布:js显示时间日期代码 编辑:程序博客网 时间:2024/04/26 20:15

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
原创粉丝点击