Objective-C_面向对象

指引:

学编程的人必定学过C语言,C语言是一门面向过程的语言。然而OC是一门面向对象的语言,学过C#,java等语言的人都知道什么是面向对象。现在流行的高级语言大多数都面向对象,那么为什么学习面向对象语言呢?这个问题应该问一下自己。要理解面向对象,第一步就必须要搞明白类和对象

类和对象:

类是具有一些共同特征和行为的事物的集合。

对象就是类的具体实现。

类:

什么是封装

在OC中,特征是property(属性),行为是method(方法),一个对象便由诸多的属性和方法组成的。将属性和方法相结合,共同体现对象的特性,称之为封装。封装可以做到隐藏内部实现,稳定外部接口。

类的定义:

一个类中包括两个部分:@interface和@implementation。前者主要是属性或成员变量和方法的声明,后者则是方法的实现。

@interface部分:

 

#import <Foundation/Foundation.h>

@interface Student : NSObject

@property(nonatomic,copy)NSString *name;//姓名

@property(nonatomic,assign)NSInteger age;//年龄

- (void)sayHi;//打招呼

//便利初始化

- (id)initWithName:(NSString *)aName age:(NSInteger)anAge;

//便利构造器

+ (id)studentWithName:(NSString *)aName age:(NSInteger)anAge;

 

@implementation部分

 

#import "Student.h"

@implementation Student

- (id)initWithName:(NSString *)aName age:(NSInteger)anAge

{

    if (self = [super init]) {

        _name = [aName retain];

        if (anAge <= 0 ) {

            _age = 18;

        }else{

            _age = anAge;

        }

    }

    return self;

}

+ (id)studentWithName:(NSString *)aName age:(NSInteger)anAge

{

    Student *student = [[Student alloc]initWithName:aName age:anAge];

    return [student autorelease];

}

- (void)sayHi

{

    NSLog(@"my name is %@,aged %ld",_name,_age);

}

- (void)dealloc

{

    [_name release];

    [super dealloc];

}

对象:

创建和使用对象

语法:

类名 *对象名 =[[类名 alloc]init];或者

类名 *对象名 = [类名 new];

创建的对象指向alloc(开辟内存)类方法和init(初始化)实例方法所开辟的内存空间,而new则是进行alloc和init这两步,相信学过c#和java的朋友对第二种应该很熟释。 

由上面的代码可以看到方法声明那里有两种,一种是"-"开头的,另一种是"+"开头的。前者是实例方法,后者是类方法,也叫工厂方法

实例方法需要实例化对象之后通过对象进行调用的。实例方法允许调用实例变量和实例方法

类方法不需要实例化对象,可以直接通过类来调用,下面有一些类方法的潜规则,要留意一下。

  类方法可以用调用类方法

  类方法不可以调用实例方法,但是可以通过创建对象来访问实例方法。

  类方法不可以使用实例变量。类方法可以用self,因为self不是实例变量。

下面类方法和实例方法的调用

Student *student = [Student studentWithName:@"jimmy" age:18];//调用类方法初始化对象

 [student sayHi];//通过对象调用实例方法。

细心的朋友应该能留意到h文件上的代码有两个方法,一个是便初始化函数,另一个是便利构造器。这两个方法使给对象初始化灵活得多了,更加方便。

(对自己所学的进行了一次总结,欢迎大神吐槽)

posted @ 2015-08-26 15:10  Jimmy_Ng  阅读(175)  评论(0编辑  收藏  举报