黑马程序员——OC中的类

来源:互联网 发布:java web 项目授权 编辑:程序博客网 时间:2024/05/17 05:02

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


1.ObjC跟C的区别与联系

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


2.ObjC中的类与对象

类由接口( XX.h    @interface)和实现(XX.m   @implementation)两部分构成

XX.h中声明类中的实例变量和功能

XX.m中实现.h中的功能


注意:

  1. 命名规则 类名首字母大写  Student  方法名首字母小写(驼峰)-(void)sayHi
  2.  实例方法     +  类方法


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;


  1. 注意:


  1. @property()里边的属性

访问控制: readwrite      readonly

内存管理:assign 基本       retain 对象  copy 实现NScopying

线程安全:atomic     nonatomic 非原子性




对象初始化三个方法


  1. 指定初始化赋值:

声明: 

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

注意:

  1. 通常以init开头 返回值为id
  2. 一个类只有一个指定初始化方法
  3. 指定的初始化方法是必须执行的
  4. 内部实现会调用到父类的初始化方法






便利构造器:

声明:

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


注意:

  1. 便利构造器方法以类名开头
  2. 类方法内部不能用实例变量
  3. 类方法只能以类(名)来调用





单例模式:

声明:

+(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;


注意:

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


0 0
原创粉丝点击