美文网首页
OC中的类,单例对象

OC中的类,单例对象

作者: 泥_叔 | 来源:发表于2015-10-10 14:13 被阅读353次

1.ObjC跟C的区别与联系
首先 ObjC是一个面向对象的语言(封装、继承、多态) ObjC相当于C的一个超集 即ObjC允许使用任何C语言代码 但增加了许多C没有的特点 bigger easier

2.ObjC中的类与对象
类由接口( XX.h @interface)和实现(XX.m @implementation)两部分构成
XX.h中声明类中的实例变量和功能
XX.m中实现.h中的功能

注意:
命名规则 类名首字母大写 Student 方法名首字母小写(驼峰)-(void)sayHi

  • 实例方法 + 类方法

3.对象的创建和使用
要创建一个类的对象,即要做3件事:对象的声明、分配内存空间、对象的初始化

声明:@interface Student : NSObject
{
实例变量 int _age;

}
方法名:
-(void)setAge:(int)age;
-(int)getAge;
-(void)sayHi;

实现:#import "Student.h"

@implementation Farmer

-(void)setAge:(int)age
{
int _age=age;
}
-(int)getAge
{
return _age;
}

-(void)sayHi
{ }
调用:#import "Student.h"
Student *s=[[Student alloc]init];
s.name=@"tt";
[s sayHi];

属性:@property(non atomic,retain)NSString *name; //setter getter方法
@synthesize name = _name;

注意:

@property()里边的属性
访问控制: readwrite readonly
内存管理:assign 基本 retain 对象 copy 实现NScopying
线程安全:atomic nonatomic 非原子性

对象初始化三个方法

指定初始化赋值:
声明:
-(id)initWithName:(NSString *)name;
-(id)initWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex andTalent:(NSString *)talent andMate:(id)mate;

实现:
-(id)initWithName:(NSString *)name
{
self=[super init];
if (self)
{
_name=name;
}
return self;
}
-(id)initWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex andTalent:(NSString *)talent andMate:(id)mate
{
self=[self initWithName:name];
if (self)
{
_name=name;
_age=age;
_sex=sex;
_talent=talent;
_mate=mate;
}
return self;
}

调用:
Rider *r=[[Rider alloc]initWithName:@"rider" andAge:25 andSex:@"M" andTalent:@"HP 30,MP 0,SP 30" andMate:nil];
注意:
通常以init开头 返回值为id
一个类只有一个指定初始化方法
指定的初始化方法是必须执行的
内部实现会调用到父类的初始化方法

便利构造器:
声明:
-(id)initWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex andTalent:(NSString *)talent andMate:(id)mate;
+(id)machineWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex andTalent:(NSString *)talent andMate:(id)mate;

实现:
-(id)initWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex andTalent:(NSString *)talent andMate:(id)mate
{
self=[super init];
if (self)
{
_name=name;
_age=age;
_sex=sex;
_talent=talent;
_mate=mate;
}
return self;
}

+(id)machineWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex andTalent:(NSString *)talent andMate:(id)mate
{
Machine *mac=[[Machine alloc]initWithName:name andAge:age andSex:sex andTalent:talent andMate:mate];
return [mac autorelease];//便利构造器内部已经实现内存管理
}

调用:
Machine *mac=[Machine machineWithName:@"machine" andAge:5 andSex:@"?" andTalent:@"HP 10,MP 0,PW 100" andMate:nil];

注意:
便利构造器方法以类名开头
类方法内部不能用实例变量
类方法只能以类(名)来调用

单例模式:
声明:
+(King *)defaultKing;

实现:
+(King *)defaultKing
{
static King *k=nil;
if (k==nil)
{
k=[[King alloc]init];
}
return k;
}

调用:
King *k=[King defaultKing];
k.name=@"king";
k.age=100;
k.sex=@"M";
k.talent=@"PH 10,MP 10";
k.mate=nil;

注意:
单例对象的类只能有一个实例

相关文章

  • OC中的类,单例对象

    1.ObjC跟C的区别与联系首先 ObjC是一个面向对象的语言(封装、继承、多态) ObjC相当于C的一个超集 ...

  • 单例模式的书写

    ARC OC 中的单例 根据OC单例 改写成 Swift 中的单例 OC调用swift,需要#import "单例...

  • 单例

    内存中只有一个对象实例 提供一个全局访问点 OC中的单例 swift中的单例 swift改进过的单例

  • swiftly单例

    swiftly的单例比OC的更加简单! Oc中的单例:

  • 单例模式

    特点 单例类只有1个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单例的全局访问点 结构 单例...

  • Swift中的单例

    项目开发中往往经常使用单例模式,单例的目的: 内存中只有一个对象实例 提供一个全局访问点 OC 中的单例写法 Sw...

  • 单例模式

    一、定义与特点 单例模式的特点 单例类只有一个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单...

  • 单例模式、异常、模块

    单例模式 创建单例-保证只有1个对象 创建单例时,只执行1次init方法 目的 —— 让 类 创建的对象,在系统中...

  • 单例设计模式

    单例设计模式 单例设计模式:让类的对象称为系统中唯一的实例 想要实现单例的类,必须遵守NSCopying和NSMu...

  • Java & Groovy & Scala & Kotlin -

    Scala 篇 单例对象 在 Java 中实现单例对象通常需要自己实现一个类并创建 getInstance() 的...

网友评论

      本文标题:OC中的类,单例对象

      本文链接:https://www.haomeiwen.com/subject/iwgncttx.html