OC语言基础

来源:互联网 发布:python实例100例 编辑:程序博客网 时间:2024/05/22 08:53

过程式编程和面向对象对象编程的差别

    在过程式编程中,数通常保存在简单的结构体中(如C的struct元素),还有一些较为复杂的数据结构,例如链表和树。当调用一个函数时,将数据传递给函数,函数会处理这些数据,过程式编程建立在函数之上,数据为函数服务。

    而在面向对象编程中,不再关注于程序中的函数,而是关注于数据,数据通过间接方式引用代码,代码可以对数据进行操作。


在OC中只要看到@符号,就可以把它看做对C语言的扩展,所有OC语言的关键字都以@开头,字符串也以@开头。


@interface 部分

    在创建某个指定类的对象之前,OC编译器需要有一些有关该类的信息,尤其是对象的数据成员及其提供的功能。可以使用@interface指令把这些信息传递给编译器。差不多相当于Java中的class。


//冒号后表示所继承的类,在OC中可以选择不继承,但如果你使用的是cocoa框架,就需要继承NSObject类。@interface Student : NSObject{    int stuId;    NSString *name;    int age;}//成员变量声明必须在花括号内/*在OC中,减号后被称为方法声明,列出每个方法的名称、方法返回值的类型和某些参数; 减号后面是方法的返回类型,位于圆括号中; 冒号后为参数类型和参数名称。 */- (int)stuId;//getter方法命名以其返回的属性名称命名- (int)age;- (void)setAge:(int)newAge;//setter方法命名以其所更改的属性名称加get前缀@end//告诉编译器,我们已经完成类的声明;非必需,但是提倡;OC编译器指令后不需要分号。


@implementation 部分

    在OC中,@interface只是用于定义类的公共接口,而真正能使对象运行的代码位于@implementation部分中。 

@implementation Student- (int)stuId{    return stuId;}- (int)age;{    return age;}- (void)setAge:(int)newAge{    age = newAge;}@end
    @implementation是一个编译器指令,表明你将为某个类提供代码,类名出现在@implementation之后。

    接下来是各个方法的定义。它们不必按照在@interface指令中的顺序出现,你甚至可以在@implementation中定义那些在@interface中没有声明过的方法,可以把它们看做是仅能在当前类实现中使用的私有方法。

    @interface和@implementation间的参数名不同是允许的。


实例化对象

    在OC中创建一个新的对象有两种方法。

   Student *stu1 = [Student new];   Student *stu2 = [[Student alloc] init];

    new是较为老式的写法,后来发现只有一个new不好使,才引入了alloc和init这种写法,保留new一是向后兼容,二是很多时候是一种更简单的写法。其实是一样的,new在内部调用的alloc和init。

    alloc方法分2步,先调用静态无参函数alloc申请内存,再调用静态无参函数init初始化
        1. Student *stu = [Student alloc];//仅仅为对象分配内存空间
        2. stu = [stu init];//真正创建对象
    以上2步一般简写为:  Student *stu = [[Student alloc] init];

int main(int argc, const char * argv[]) {    Student *stu = [[Student alloc] init];    //设置    [stu setAge:100];    //获取    NSLog(@"age is %i",[stu age]);    [stu release];//对象使用完毕要释放内存    return 0;}







0 0
原创粉丝点击