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];