Objective-C基础笔记(1)基本概念和第一个程序

来源:互联网 发布:sql语句求和1到50 编辑:程序博客网 时间:2024/06/05 20:52

一、基本概念

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)


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

注意:

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

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

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

语法:


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

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

nil相当于Java中的null

self相当于Java中的this

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

继承和Java相同是单继承

二、第一个OC程序


选择命令行程序

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

////  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文件,工程如下:

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] Studentage100


四、点语法

#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;}


4 0
原创粉丝点击