Foundation框架下的常用类

【字段的权限】
【注】在类中声明字段,可以为字段添加权限
@private 私有权限
@protected 保护权限
@public 公有权限
@interface Father : NSObject
{
@private    //私有权限修饰的变量,不能被子类继承,不能被外部函数访问。
    int a;
@protected  //缺省权限 保护权限修饰的变量,可以被子类继承,不能被外部函数访问。
    int b;
    int c;
@public     //公有权限修饰的变量,可以被子类继承,可以被外部函数访问。
    int d;
}

@end

father->d = 9;

//保护成员,被继承了,仍然是保护成员
//公有成员,被继承了,仍然是公有成员

【注】
//实际工作中,根本不需要使用权限,都使用缺省的保护权限就可以了。
//如果你想要成员变量被外部函数访问,声明成属性。
//如果你想变量不被子类继承,不对外公开。声明在实现里。

@implementation Father
{
    int x;
}

【方法的权限】
【注】
//OC中成员方法都是公有的,可以被继承,可以被外部方法访问。
//没有在接口中做声明的方法,这个方法不能被外部函数直接访问。
//通过不声明(或者仅在匿名类别中声明),我们模拟了私有方法,这个过程,有时被称为方法的私有化。

【注】下面情况,方法私有化不成功
1.父类公有的方法,子类重写,即使子类不声明,方法也是公有的。
2.在协议中声明的方法,遵从协议的对象,即使不声明,只实现,方法也是公有的

【另】方法的私有化,声明即外露,不声明即不外露,本没什么可记的。但是面试经常会被问到:OC能实现私有方法吗?可照上述方式回答。




【NSNumber】
【注】继承自C语言的基础变量类型(int, char, float等)不能被添加到数组和字典等OC专有的数据结构中。使用不方便,也不能通过添加类别等OC专有语法,进行管理。

【注】可以先将基础类型数据,存入NSNumber对象,再将NSNumber对象存入数组或字典中。

【另】可以认为,NSNumber是基础变量类型数据,转成对象数据的类。

【见day8-NSNumber-1】

【掌握】

NSNumber * num = @6;
- (char)charValue;
- (id)initWithChar:(char)value;
+ (NSNumber *)numberWithChar:(char)value;

- (NSComparisonResult)compare:(NSNumber *)otherNumber;
- (BOOL)isEqualToNumber:(NSNumber *)number;



【NSValue】
【注】NSValue是NSNumber的父类,可以存储任何类型的数据,包括复合数据类型(数组,指针,结构体等),甚至是对象。
【day8-NSValue-1】

//原生方法
- (void)getValue:(void *)value;
- (const char *)objCType

//初始化或类方法
- (id)initWithBytes:(const void *)value objCType:(const char *)type;
+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;
+ (NSValue *)value:(const void *)value withObjCType:(const char *)type;

//存取对象的方法(了解)
+ (NSValue *)valueWithNonretainedObject:(id)anObject;
- (id)nonretainedObjectValue;

//比较两个Value对象是否相等(了解)
- (BOOL)isEqualToValue:(NSValue *)value;


【注】NSValue和NSNumber也是工厂类,不能被继承
//NSString是工厂类,是一堆类,共享一个名字。根据不同的创建方式,会得到不同类的对象。
//例如:有一个动物类,可以创建猫,和狗,和其他动物。

【NSDate】
【注】NSDate是时间类,可以创建一个时间点的对象。
【另】面向对象程序讲究一切事物皆对象,无论是具象事物还是抽象事物。

+ (id)date;
返回系统时间 以格林威治时间(GMT)为准
+ (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;
返回以当前时间为基准,然后过了secs秒的时间
+ (id)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)
secs;
返回以2001/01/01 GMT为基准,然后过了secs秒的时间
+ (id)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;
返回以1970/01/01 GMT为基准,然后过了secs秒的时间

- (NSTimeInterval)timeIntervalSinceNow;
以当前时间(Now)为基准时间,返回实例保存的时间与当前时间(Now)的时 间间隔
- (NSTimeInterval)timeIntervalSince1970;
以1970/01/01 GMT为基准时间,返回实例保存的时间与1970/01/01 GMT 的时间间隔
- (NSTimeInterval)timeIntervalSinceReferenceDate;
以2001/01/01 GMT为基准时间,返回实例保存的时间与2001/01/01 GMT 的时间间隔


+ (id)distantFuture;
返回很多年以后的未来的某⼀一天。 比如你需要⼀一个比现在(Now)晚(大)很长时间的时间值,则可以调用该方法。
+ (id)distantPast;
返回很多年以前的某⼀一天。
比如你需要⼀一个比现在(Now)早(小)大很长时间的时间值,则可以调用该方 法。

- (id)addTimeInterval:(NSTimeInterval)secs;
返回以目前的实例中保存的时间为基准,然后过了secs秒的时间





【NSTimeZone】
【注】时区类,用于时区转换
+ (NSTimeZone *)systemTimeZone;
//返回当前系统时区
+ (NSDictionary *)abbreviationDictionary;
//返回TimeZone支持时区的键值对
+ (id)timeZoneWithAbbreviation:(NSString *)abbreviation;
//通过传入键值对的键,创建对应的时区对象。


【NSDateFormatter】
【注】时间戳,用于显示时间
//创建时间戳
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];

//使用时间戳的目的,是为了自定义时间的打印格式
dateFormatter.dateFormat = @"yyyy年MM月dd日 HH:mm:ss.S";
        
//后设置会顶替原设置
dateFormatter.dateFormat = @"yy-MM-dd ahh时mm分ss秒";

//设置时区,如果不设,缺省是系统时区
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"CST"];

//根据风格,返回时间打印的字符串
NSLog(@"%@", [dateFormatter stringFromDate:date]);



【NSNull】
【注】表示空的事物有四个
【NULL】【nil】【Nil】【NSNull】

NULL:表示基础类型指针为空
int * p = NULL;

nil:表示对象指针为空
id obj = nil;

Nil:表示Class变量为空
Class class = Nil;

NSNull:用在数组字典等数据结构中占位,作为空元素
//唯一方法
[NSNull null]; 创建表示空的对象
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值