Objective

Wesley13
• 阅读 683

一、基本概念

Objective-C(简称OC)是iOS开发的核心语言,苹果公司在维护,在开发过程中也会配合着使用C语言、C++,OC主要负责UI界面,C语言、C++可用于图形处理。C语言是面向过程的语言,OC是在C语言基础上加上了一层面向对象的语法(将复杂面向对象语法去掉了)。我们可以使用OC开发Mac OS X平台和IOS平台的应用程序。

2014年10月编程语言排行榜(http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)

Objective

从这个排行榜上可以看到,高居榜首的还是c、java、object-c、c++、c#、php、python、javascript.

注意:

1、Objective-C是没有包的概念的,也就是没有命名空间机制,而是通过给类名添加前缀来防止类名冲突。

2、Objective-C中的关键字以@开头,防止和c/c++的关键字冲突。

3、Objective-C中的字符串以@开头。

语法:

Objective

需要注意的是上面的红色字部分:

BOOL类型(YES\NO)其实就是1和0

nil相当于Java中的null

self相当于Java中的this

for(xx in xx)和javascript的快速遍历相同,相当于java中的for...each

继承和Java相同是单继承

二、第一个OC程序

Objective

选择命令行程序

Objective

选择语言位Objective-C,创建好的工程如下:

Objective

//
//  main.m
//  firstOCProj
//
//  Created by lixiaoqiang on 14/11/11.
//  Copyright (c) 2014年 lixiaoqiang. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

控制台输出:

2014-11-11 23:44:36.052 firstOCProj[1649:99047] Hello, World!

上面的@autoreleasepool和内存管理有关,暂时不用管。

#import  <Foundation/Foundation.h> : import和include的作用一样,唯一区别是可以防止头文件被重复包含。

NSLog():向控制台输出日志,相当于c语言中的printf(),和android中的Log

三、类的基本语法

OC中的类分为两个文件,一个是.h文件,另一个是.m文件(是OC文件的后缀名)

.h : 类的声明文件,用于声明成员变量和方法。

.m : 实现.h中声明的方法。

新建Student.h和Student.m文件,工程如下:

Objective

Student.h文件

//
//  Student.h
//  firstOCProj
//
//  Created by lixiaoqiang on 14/11/11.
//  Copyright (c) 2014年 lixiaoqiang. All rights reserved.
//
//该文件只是用来声明Student这个类有哪些成员变量和方法

//包含NSObject所在的头文件
#import <Foundation/Foundation.h>
//@interface @end代表声明一个类
//和Java不同的是OC中不能省略NSObject的默认继承
// : 代表继承
@interface Student : NSObject{
    //定义成员变量(必须定义在该括号内)
    int age;
}

//age的get方法
//如果是动态方法 -
//如果是静态方法 + (-和+必须添加)
//OC中的参数类型都用括号括住
//.h文件中的方法都是公共方法
- (int)age;

//age的set方法
//OC中一个 : 对应一个参数
- (void)setAge:(int)newAge;
@end

Student.m文件

//
//  Student.m
//  firstOCProj
//
//  Created by lixiaoqiang on 14/11/11.
//  Copyright (c) 2014年 lixiaoqiang. All rights reserved.
//
//自定义的头文件使用双引号
#import "Student.h"

@implementation Student

- (int)getAge {
    return age; //age在父类中
}

- (void)setAge:(int)newAge {
    age = newAge;
}

@end

main.m文件

//
//  main.m
//  firstOCProj
//
//  Created by lixiaoqiang on 14/11/11.
//  Copyright (c) 2014年 lixiaoqiang. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //创建一个Student对象
        //1、调用一个静态方法alloc分配内存
        //OC 中通过类名调用方法 [类名 方法名]
        //[Student alloc]返回一个指针,在OC中stu称为对象
        //这个其实和Java中的对象(this)是一样的(引用)
        //Student *stu = [Student alloc];
        //2、调用一个动态方法init进行初始化
        //stu = [stu init];
        
        //连接起来使用
        Student *stu = [[Student alloc] init];
        [stu setAge:100];
        NSLog(@"调用了setAge方法");
        int age = [stu age];
        NSLog(@"Student的age是%i", age);
        //释放对象
        //[stu release];
    }
    return 0;
}

运行结果:

2014-11-12 00:25:03.661 firstOCProj[1707:110472] 调用了setAge方法

2014-11-12 00:25:03.663 firstOCProj[1707:110472] Student的age是100

四、点语法

#import <Foundation/Foundation.h>

@interface Person : NSObject{
    int _age;
    int _no;
}

- (void)setAge:(int)newAge;
- (int)age;

//注意: 方法名是setAge:andNo:
- (void)setAge:(int)newAge AndNo:(int)no;

@end

#import "Person.h"

@implementation Person

//方法名是setAge:  (冒号也是方法名的一部分)
- (void)setAge:(int)newAge {
    NSLog(@"调用了setAge方法:%i", newAge);
    _age = newAge;
}

//方法名是age
- (int)age {
    NSLog(@"调用了age方法");
    return _age;
}

@end

在Person类的实现里面我们分别打印了两个log用来判断是否调用了该方法

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *person = [[Person alloc] init];
        
        //方法一:
        //[person setAge:10];
        //int age = [person age];
        
        //方法二:(点语法)
        //OC中调用的成员方法,等效于[person age]
        person.age = 11;
        //等效于[person setAge:11]
        int age = person.age;
        
        NSLog(@"age is %i", age);
    }
    return 0;
}

输出结果:

2014-11-12 20:03:55.718 firstOCProj[521:19414] 调用了setAge方法:11

2014-11-12 20:03:55.719 firstOCProj[521:19414] 调用了age方法

2014-11-12 20:03:55.720 firstOCProj[521:19414] age is 11

可以看到在OC中的点语法和Java中是不一样的,person.age调用的是成员方法而不是变量。

五、构造方法和%@

//
//  Person.m
//  firstOCProj
//
//  Created by lixiaoqiang on 14/11/12.
//  Copyright (c) 2014年 lixiaoqiang. All rights reserved.
//

#import "Person.h"

@implementation Person

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

- (int)age {
    return _age;
}

- (void)setNo:(int)no {
    _no = no;
}

- (int)no {
    return _no;
}

//实现构造方法

- (id)initWithAge:(int)age andNo:(int)no {
    //首先要调用super的构造方法
    if(self = [super init]){   //如果self不为nil
        self.age = age;
        self.no = no;
    }
    return self;
}

// 重写父类的description方法
// 当使用%@打印一个对象的时候会调用
// NSString 是一个字符串类
- (NSString *)description {
    return [NSString stringWithFormat:@"age is %i and no is %i", _age, _no];
}

@end

//
//  main.m
//  firstOCProj
//
//  Created by lixiaoqiang on 14/11/11.
//  Copyright (c) 2014年 lixiaoqiang. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *person = [[Person alloc] initWithAge:15 andNo:2];
        
        NSLog(@"age is %i and no is %i", person.age, person.no);
        
        //%@代表打印一个OC对象
        NSLog(@"%@", person);
    }
    return 0;
}
点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Python服务器开发一:python基础
Python(蟒蛇)是一种动态解释型的编程语言。Python可以在Windows、UNIX、MAC等多种操作系统上使用,也可以在Java、.NET开发平台上使用。【特点】1Python使用C语言开发,但是Python不再有C语言中的指针等复杂的数据类型。2Python具有很强的面向对象特性,而且简化了面向对象的实现。它消除了保护类型、抽象类、
Stella981 Stella981
3年前
OC语言@property @synthesize和id
OC语言@property @synthesize(http://my.oschina.net/u/2618113)和id一、@property @synthesize(http://my.oschina.net/u/2618113)关键字注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的
Stella981 Stella981
3年前
Category 特性在 iOS 组件化中的应用与管控
背景iOSCategory功能简介Category是ObjectiveC2.0之后添加的语言特性。Category就是对装饰模式的一种具体实现。它的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法。在ObjectiveC(iOS的开发语言,下文用OC代替)中的具体体现为:实例(类)方法、属性和协
Wesley13 Wesley13
3年前
C#与.NET
C从本质上来说,它是一门编程语言。他不是.NET体系的一部分。虽然C总是用来生成.NET平台的代码。C语言不能孤立的使用,必须与.NET平台一起使用。这样才能大大提高开发效率。相对于C,Java等语言,C是一种比较新的语言。它是在吸收了C和Java语言在设计上的优点设计出来的。从一开始C就被设计为面向对象的开发语言。.NETFra
Wesley13 Wesley13
3年前
初探 Objective
作者:Cyandev,iOS和MacOS开发者,目前就职于字节跳动0x00前言异常处理是许多高级语言都具有的特性,它可以直接中断当前函数并将控制权转交给能够处理异常的函数。不同语言在异常处理的实现上各不相同,本文主要来分析一下ObjectiveC和C这两个语言。为什么要把ObjectiveC和