Objective-C基础笔记(1)基本概念和第一个程序
2014-11-12 00:29
447 查看
一、基本概念
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; @endStudent.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; } @endmain.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; }
相关文章推荐
- Objective-C基础笔记(1)基本概念和第一个程序
- Objective-C基础笔记(1)基本概念和第一个程序
- 第一天,第一个C#程序,学习C#基本语法。掌握命名空间、类、变量、方法等基本概念。
- Objective-C学习笔记--第一个程序HelloWorld
- 密码学基本概念与信息理论基础学习笔记
- 黑马程序员零基础解析第一个Objective-c程序
- 黑马程序员——自学笔记1(java基础概念以及基本DOS命令)
- 【《Objective-C基础教程 》笔记】(八)OC的基本事实和OC杂七杂八的疑问
- Objective-C基础学习笔记(一)-程序整体语法结构
- 基本概念-编写第一个C程序
- 黑马程序员——OC基础学习(一)---第一个OC语言程序和面向对象编程的基本认识
- HTML笔记1 - 编辑器、基本概念以及基础结构
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行
- C++基础学习笔记----第七课(面向对象的基本概念)
- Objective-C基础学习笔记(一)-程序整体语法结构
- 传智播客--Web Service之基本概念,axis自带案例介绍和第一个Web Service程序
- Web Service之基本概念,axis自带案例介绍和第一个Web Service程序
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行
- 黑马程序员----objective-C 类与对象基础篇(一)【基本概念】