5.26 单例,类目,延展,协议,通知

1,单例传值,设值一定在取值之前

//  main.m

#import <Foundation/Foundation.h>
#import "Student.h"
#import "Person.h"

[[Student bestStudent].studuInfo addObjectsFromArray:@[@"chinese",@"math"]];
Person *person = [[Person alloc]init];
//  Person.h

#import <Foundation/Foundation.h>


@interface Person : NSObject

@property (strong ,nonatomic)NSString *code;

//单例:应用里面的唯一用户,游戏里面的主角,特点:唯一,全局,方便获取
//单例是非常好用的传值和存值的方法

//单例的获取
+ (Person *)heightPerson;

- (NSString *)birthday;

@end
//  Person.m

#import "Person.h"
#import "Student.h"


@implementation Person
//单例,设计模式

+ (Person *)heightPerson
{   //保证使用时初始化一次,并保证唯一
    //建立静态对象,置为nil

    static Person *person = nil;

    if (person == nil) {
        //保证不释放
        person = [[Person alloc]init];
        //
            }

    return person;
}


- (instancetype)init
{
    self = [super init];
    if (self) {
        NSArray *info = [Student bestStudent].studuInfo;
        NSLog(@"%@",info);

    }
    return self;
}


- (NSString *)birthday {

    if (_code.length < 18) {
        return nil;
    }
    NSString *string = [_code substringWithRange:NSMakeRange(6, 8)];
    return string;
}




@end
//  Student.h

#import <Foundation/Foundation.h>

@interface Student : NSObject
@property (strong, nonatomic)NSMutableArray *studuInfo;//表示学习资料

+ (Student *)bestStudent;


@end
//  Student.m


#import "Student.h"

//增加私有属性,考试成绩,以及私有方法;对外公布考试成绩和比较考试成绩

//延展
@interface Student ()
//自读和私有
@property (assign, nonatomic)NSInteger score;

- (NSInteger)compareScore:(Student *)other;


@end

@implementation Student

//实现单例的例子
+ (Student *)bestStudent
{
    static Student *student = nil;
    if (!student) {

        student  = [[Student alloc]init];
        //初始化数组
        student.studuInfo = [NSMutableArray array];
    }
    return  student;

}


- (NSInteger)compareScore:(Student *)other
{
    return self.score - other.score;
}


@end

2,类目 category


//  main.m

#import <Foundation/Foundation.h>
#import "NSString+comparevalue.h"

        NSLog(@"%ld",(long)[@"4"comparevalue:@"3"]);//-1 descending 1 ascending
        NSArray *number = @[@"1",@"2",@"5",@"3"];

        //分别用2个compare方法排序

        NSArray *sortNum = [number sortedArrayUsingSelector:@selector(comparevalue:)];
        NSLog(@"%@",sortNum);
//  NSString+comparevalue.m

#import "NSString+comparevalue.h"

@implementation NSString (comparevalue)


- (NSComparisonResult)comparevalue:(NSString *)string
{
    //self和string比较integerValue的大小
    if (self.integerValue < string.integerValue) {

        return NSOrderedAscending;

    }else if(self.integerValue > string.integerValue){

        return NSOrderedDescending;
    } else {

        return NSOrderedSame;
    }

}
@end
//
//  NSString+comparevalue.h
//  5.26.oc.类目,延展,单例
//
//  Created by rimi on 15/5/26.
//  Copyright (c) 2015年 rectinajh. All rights reserved.
//

#import <Foundation/Foundation.h>
//申明nsstring类的分栏
@interface NSString (comparevalue)
//4和11按照数值大小比较

- (NSComparisonResult)comparevalue:(NSString *)string;


@end

3,延展 一般来操作已知类,可改的自定义类.将特殊的属性和方法,放到独立的文件中,提高封装性,另一个功能:提供私有化处理和方便性(放到.m文件),提供私有化的方法和属性声明。把原有方法提取出来。

这里写代码片
//  Person_private_Property.h

#import "Person.h"



@interface Person ()
- (void)run;

@end
//  Person.h

#import <Foundation/Foundation.h>


@interface Person : NSObject

@property (strong ,nonatomic)NSString *code;


+ (Person *)heightPerson;

- (NSString *)birthday;

@end
//  Person.m

#import "Person.h"
#import "Student.h"


@implementation Person



- (NSString *)birthday {

    if (_code.length < 18) {
        return nil;
    }
    NSString *string = [_code substringWithRange:NSMakeRange(6, 8)];
    return string;
}

@end

4,协议 1,规范,约束。2,通知,回调

//  Working.h

#import <Foundation/Foundation.h>

@protocol Working //<NSObject>

//交给协议支持者去做
@property (assign,nonatomic)NSInteger salary;

- (void)work;

- (NSString *)birthday;
@property (strong,nonatomic)NSString *code;

@end
//  Develop.h

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


@interface Develop : NSObject <Working>
//支持协议,必须实现协议所规定属性和方法
//属性直接声明
@property (assign,nonatomic)NSInteger salary;

//方法无需声明,只要实现

- (NSString *)birthday;
@property (strong,nonatomic)NSString *code;


@end
//  Develop.m

#import "Develop.h"

@implementation Develop

- (void)work
{
    NSLog(@"to work!");
}

@end
 //  main.m

#import <Foundation/Foundation.h>
#import "Develop.h"
#import "Working.h"

  Develop *dev = [[Develop alloc]init];
  [dev work];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值