ios开发第一天-包装类
来源:互联网 发布:js显示时间日期代码 编辑:程序博客网 时间:2024/04/26 20:15
oc是面向对象的语言,与java类似,由于存在int,double,float等类型,因此,提供了NSValue和NSNumber来封装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
#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];}@endmain.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。
- ios开发第一天-包装类
- IOS开发第一天
- IOS开发第一天-0803
- IOS开发第一天-0807
- Ios开发-第一天-Tom猫
- iOS开发之C语言第一天
- iOS开发 第一天 创建HelloWorld
- IOS自学第一天
- iOS进军第一天
- iOS 学习第一天
- 第一天学习ios
- ios第一天
- iOS学习第一天
- iOS学习第一天
- IOS学习 第一天
- ios第一天
- IOS学习第一天
- IOS开学第一天
- 在界面顶部滑动展开的自定义FrameLayout
- 数据库
- ColorAnimationView 实现了滑动Viewpager 时背景色动态变化的过渡效果
- PorterDuffColorFilter 在项目中的基本使用
- Android端与笔记本利用局域网进行FTP通信
- ios开发第一天-包装类
- ViewPager 与SwipeRefreshLayout,RecyclerView,ScrollView滑动冲突解决方法
- GPUImageTransformFilter实现3D旋转
- android引用资源@与属性?备忘单
- Android 新推出基于物理的动画库SpringAnimation,完全诠释什么叫做弹簧效果
- Github入门(一)注册Github账号
- StandardWrapperFacade
- Android为应用添加角标(Badge)
- Java进阶学习路线图