类目 延展 单例 协议

//类目#import <Foundation/Foundation.h>
//声明一个NSString的分栏
@interface NSString (compareValue)

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

@end
----------------------------------
#import "NSString+compareValue.h"

@implementation NSString (compareValue)

- (NSComparisonResult)compareValue:(NSString *)string{

    if (self.integerValue > string.integerValue) {

        return NSOrderedDescending;
    }
    if (self.integerValue < string.integerValue) {

        return NSOrderedAscending;
    }
    return NSOrderedSame;
}
@end
#import <Foundation/Foundation.h>

@interface Student : NSObject

@property (nonatomic, retain)NSMutableArray *studyInfo;//表示学习科
+ (Student *)bestStudent;

@end

```````````````------------------
/*
 增加类目  已知 类 系统类
 延展  写在m文件私有  可操作类
      写在其他文件  封装
 kvo/kvc
*/
#import "Student.h"
@interface Student ()

@property (nonatomic, assign)NSInteger score;
- (NSInteger)compareScore:(Student *)other;

@end

@implementation Student

+ (Student *)bestStudent;{

    static Student *stu = nil;

    if (!stu) {

        stu = [[Student alloc]init];
        stu.studyInfo = [NSMutableArray array];
    }
    return stu;
}
//标准单例模式会将所有产生新对象导致释放值的方法重写
- (NSInteger)compareScore:(Student *)other{

    return self.score - other.score;
}
@end------------------------------

#import <Foundation/Foundation.h>



@interface Person : NSObject



//应用里面的唯一用户 ,游戏里的主角


//唯一 、全局不释放、方便获取



//单例的获取方法


+ (Person *)heighestPerson;



@end


#import "Person.h"


#import "Student.h"



@interface Person ()//延展可操作类,提供私有化的方法和属性的申明


@property (assign, nonatomic)NSInteger age;


@end



@implementation Person



+ (Person *)heighestPerson{



//建立静态对象,置为nil


static Person *per = nil;



if (!per) {//保证使用时初始化保证唯一,保证不释放



per = [[Person alloc]init];//保证不释放


}


return per;


}


- (instancetype)init


{


self = [super init];


if (self) {



NSArray *info = [Student bestStudent].studyInfo;


NSLog(@"%@",info);


}


return self;


}



@end

 
//
//将特殊的属性和方法,放到独立的文件中,提高封装行
//提供私有化处理和方便性
#import "Person.h"

@interface Person ()//延展,提供私有化的方法和属性的申明
@property (assign, nonatomic)NSInteger age;
@end
#import <Foundation/Foundation.h>
#import "Working.h"

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

---------------
#import "Developer.h"

@implementation Developer

- (void)work{

    NSLog(@"work");
}
@end
---------------------
#import <Foundation/Foundation.h>
//协议

//working协议,规定对象必须有salary(薪资标准)和work的能力
@protocol Working <NSObject>
@property (nonatomic, assign)NSInteger salary;

- (void)work;

@end
时间: 2024-10-11 21:52:57

类目 延展 单例 协议的相关文章

OC -- 类的类目 , 延展 , 协议

类目 分两部分: 1.系统已经写好的类目:按照功能对系统的类方法进行区分. 类目从@interface开始,后面是当前类名字,类名后是分类的功能, 到@end结束. 2.我们创建的类目,一般是为了把系统的类进行扩充. 对系统的类(例:NSString)添加文件Objective-C File {File:StringMethod; File Type:Category; Class: NSString}后,会自动出现@interface NSString (StringMethod).文件名为:

Objective-C类目延展协议

一.类目:(Category) 是在原有类的基础之上添加方法,在使用的时候只需要用原有类实例化出来的对象即可: 实际开发中什么情况下使用类目? 已经封装好的类,(不希望再改变原有类) 团队里面分工开发一个模块的时候可以使用自己定义的方法: 二.延展:(Extension)的基本概念和用法: 在xcode4.3之前直接使用self 调用方法  那时候会报错,所以的用延展 就是在类中添加私有方法,延展中声明的方法在类的本身的@interface  类名()和它对应的@end之间实现: 类有时需要方法

类目 延展 协议

1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. 首先先建个类目 command+n 给什么类写类目下面就写那个类的名字 上面填的是给这个类添加的方法的名字 @interface NSMutableArray (Sort) //为NSMutableArray类添加Sort方法,Sort就是类目名,做到见名知意-(void)invert;//方法@end 实现部分 #import "NSMutableA

设计模式中饿汉式单例类和懒汉式单例类

单例模式的特点为: *单例类只有一个实例. *单例类必须自己创建自己的唯一实例. *单例类必须给所有其他对象提供这一实例. 饿汉式单例类: 而饿汉式单例类则在java语言中是最为简单的单例类,这是一个描述饿汉式单例类的类图的实现. 此类图中,此类已经将自己实例化. 源码为: package singleton; public class EagerSingleton { private static EagerSingleton instance=new EagerSingleton(); /*

SpringMVC框架Controller类就是一个单例类

Springmvc框架Controller类就是一个单例类,所以他在速度和性能上是比较优越的. 这里需要特别注意的一点是:如果一个类已经是单例类了,你就不要在手动的创建类的对象了,这种做法是不可取的,会对系统造成较大的开销.最致命的一点就是,在并发环境下,会导致查询出来的数据错乱. 一般情况下,controller中只会有service对象,因为service是接口,不会存在成员变量一说,接口嘛,只会有常量和方法,不会存在资源的抢夺问题. 原文地址:https://www.cnblogs.com

类目,延展,协议的基本概念

Catgory(类目/分类) 1.分类是给原有类添加方法,它只能添加方法,不能添加属性(成员变量) 2.分类中定义@property,只会生成setter/getter方法的声明,没有方法的实现以及私有变量. 3.分类中的方法不能和本类的方法名相同,否则会有警告,而且调用的时候会优先调用分类的方法,即覆盖本类的方法. 4.分类的方法和实现分开,一对多,1个.h文件对应多个.m文件,典型的分散实现: 延展(Extension) 1.延展为类创建私有方法,一个.m文件对应多个.h文件,分配权限时可以

【objective-c】类目 延展 协议

1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. Category的使用场景有那些呢:1.类包含了很多个方法实现,而这些方法需要不同团队的成员来实现2.当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时. Category能实现上面的需求,当然也有使用Category是需要注意的问题: 1.Category可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就通过继承创建子类

[objective-c] 03 - 类目 延展 协议

本章主要讲解OC语言特性 类目(Category) 延展(Extension) 协议(Protocol) 1.类目 OC语言中的类目机制只有一个作用:为任何一个类添加方法 现在我们创建一个Student类 @interface Student : NSObject @property(nonatomic,strong)NSString * name; @end @implementation @end 如果想为Student类添加一个方法,现在有两种方法 直接修改Student类的源码,声明一个

Egret场景切换管理类切换和单例使用方法

场景切换是很多开发者在开发过程中必不可少的一个环节,当项目中有两个或两个以上的游戏场景时,怎样管理这些场景,能够使它们之间的切换更加方便呢?今天就为大家介绍场景切换管理类的切换方法和单例的使用方法. 案例源码:https://github.com/hkjlx/qhcj 首先创建一个所有场景的父类Scene Scene类主要是为了方便管理场景,此类是一个抽象类,子类必须继承此类并实现onComplete()抽象方法才能进行场景的切换. abstract class Scene extends eu