黑马程序员——OC语言基础篇---基本语法、类
来源:互联网 发布:mac装好的软件在哪里 编辑:程序博客网 时间:2024/05/22 14:08
------Java培训、Android培训、iOS培训、.Net培训 期待与您交流! -------
本篇讲述了OC的基本语法以及类的使用。
基本语法篇
1.oc小知识
OC可以同时编写c语言和oc的东西,后缀名是.m,
还可以编写c++的东西,但是要把后缀名改成.mm。
大部分关键字以@开头
nil = c中的null(0)
输出使用NSLog(@"hello")(输出一句话之后会自动换行,所以不用'\n'了),使用NSLog需要import Foundation框架的主头文件Foundation.h#import <Foundation/Foundation.h>int main(){ NSLog(@"第一个OC小程序"); return 0;}
import用途
与include一样,拷贝文件内容,可以自动防止文件的内容被重复拷贝(相当于上一篇中所讲的条件编译在头文件里的作用)localhost:OC liweixi$ cc 01-第一个OC程序.m -framework Foundation
localhost:OC liweixi$ ./a.out
2015-04-15 10:53:30.814 a.out[2367:507] 第一个OC小程序
oc的开发过程
oc的程序在编译上与c语言的一样,但是在链接的时候有所不同
c语言的链接是将所有的.o目标文件和c语言的函数库链接生成一个可执行文件
oc的链接编译时不会将oc的函数库链接进来,所以编译时需要把框架加上
2.BOOL型
BOOL类型的本质:typedef signed char BOOL;
BOOL类型的变量有2种取值:YES、NO
#define YES (BOOL)1#define NO (BOOL)0BOOL的输出(当做整数来用)
NSLog(@"%d %d", YES, NO);
3. 多文件开发
#import "two.h"int main(){ test(); return 0;}
two.c
#include<stdio.h>void test(){ printf("这里调用了.c文件\n");}
two.h
#ifndef TWO_H#define TWO_Hvoid test();#endif编译及运行
localhost:多文件混用 liweixi$ cc one.m two.c
localhost:多文件混用 liweixi$ ./a.out
这里调用了.c文件
localhost:多文件混用 liweixi$
4. 常用术语
面向对象 Object Oriented 简称OO
面向对象编程 Object Oriented Programming 简称OOP
类--基础篇
1. 类的设计与实现
属性
行为(功能)
完整的写一个类,必须有声明和实现 (实际上只有实现没有声明,程序也是可以运行的,但是最好还是声明和实现都要有)
#import<Foundation/Foundation.h>@interface Car:NSObject{ @public int wheels; float speed;}- (void) run;@end@implementation Car- (void) run{ NSLog(@"车子跑起来,时速%f",speed); }@endint main(){ Car *p = [Car new]; p->wheels = 4; NSLog(@"车子的轮子数:%d",p->wheels); p->speed = 200; [p run]; return 0;}
localhost:类相关 liweixi$ cc 03-第一个oc类的练习.m -framework Foundation
localhost:类相关 liweixi$ ./a.out
2015-04-15 11:36:01.514 a.out[2531:507] 车子的轮子数:4
2015-04-15 11:36:01.516 a.out[2531:507] 车子跑起来,时速200.000000
localhost:类相关 liweixi$
@public是为了能从外部访问成员变量,但是这种方法其实不推荐,面向对象的思想就是将类中所有的方法和成员变量封装,要使用成员变量只能通过方法来调用,而不能让外部知道其内部的设计,关于这点的解决方法将放到下面的set方法和get方法中来说明。
2. OC编程的注意点
oc中的对象是不可能自动回收的(这个涉及到内存管理的相关知识,后面会有专门的介绍)
oc编程时的一些常见错误
(1)interface定义和implementation不可以嵌套
(2)方法的声明一定要在interface内,不可以在implementation中进行方法的声明,方法不能用static修饰
(3)interface声明的时候,不允许给成员变量赋值,不能随便将成员变量当做C语言中的变量,不能用static修饰
3. 类的合理设计
#import<Foundation/Foundation.h>typedef struct{ int year; int month; int day; }Date;typedef enum{ ColorBlue, ColorBlack, ColorWhite,}Color;//定义一个性别的枚举类型typedef enum{ Sex_man, Sex_woman, }Sex;@interface Dog:NSObject{ @public double _weight; Color furColor;}-(void) eat;-(void) run;@end@implementation Dog- (void) eat{ _weight+=1; NSLog(@"狗吃完这次之后的体重是%f",_weight);}- (void) run{ _weight -= 1; NSLog(@"狗跑完这次之后的体重是%f",_weight);}@end@interface Student:NSObject{ @public Sex sex; Date birthday; double weight; Color favColor; char *name; Dog *_dog;}- (void) eat;- (void) run;- (void) print;- (void) liugou;- (void) weigou;@end@implementation Student- (void) eat{ weight+=1; NSLog(@"吃完这次之后的体重是%f",weight);}- (void) run{ weight -= 1; NSLog(@"跑完这次之后的体重是%f",weight);}- (void) print{ NSLog(@"性别=%d,喜欢的颜色=%d,姓名=%s,生日=%d-%d-%d",sex,favColor,name,birthday.year,birthday.month,birthday.day);}- (void) liugou{ [_dog run]; NSLog(@"test%f",_dog->_weight);}- (void) weigou{ [_dog eat];}@endint main(){ Student *s = [Student new]; s -> weight = 50; s -> sex = Sex_man; s->birthday.year = 2011; s->birthday.month = 9; s->birthday.day = 10; s->favColor = ColorBlack; s->name = "OC-Program"; [s eat]; [s eat]; [s run]; [s run]; [s print]; Dog *d = [Dog new]; d -> _weight = 25; d -> _furColor = ColorBlack; s->dog = d; [s liugou]; [s weigou]; return 0;}运行结果
localhost:类相关 liweixi$ cc 07-类的合理设计.m -framework Foundation
localhost:类相关 liweixi$ ./a.out
2015-04-15 12:12:55.721 a.out[2642:507] 吃完这次之后的体重是51.000000
2015-04-15 12:12:55.722 a.out[2642:507] 吃完这次之后的体重是52.000000
2015-04-15 12:12:55.723 a.out[2642:507] 跑完这次之后的体重是51.000000
2015-04-15 12:12:55.723 a.out[2642:507] 跑完这次之后的体重是50.000000
2015-04-15 12:12:55.723 a.out[2642:507] 性别=0,喜欢的颜色=1,姓名=OC-Program,生日=2011-9-10
2015-04-15 12:12:55.724 a.out[2642:507] 狗跑完这次之后的体重是24.000000
2015-04-15 12:12:55.724 a.out[2642:507] test24.000000
2015-04-15 12:12:55.724 a.out[2642:507] 狗吃完这次之后的体重是25.000000
这段代码中有两个类:Student和Dog,他们之间的关系是Student拥有Dog,是组合关系
- 黑马程序员——OC语言基础篇---基本语法、类
- 黑马程序员——OC语言基础篇---核心语法
- 黑马程序员—OC语言基础—基础语法知识
- 黑马程序员——OC语言(一)--基本语法
- 黑马程序员——6、OC语言(基本语法)
- 黑马程序员——OC语言基本语法
- 黑马程序员——OC语言------基本语法
- 黑马程序员—OC语言基础—核心语法小结
- 黑马程序员——OC基础语法
- 黑马程序员——OC基础语法
- 黑马程序员——oc基础语法
- 黑马程序员——OC基础——OC基本语法和面向对象的基本概念
- 黑马程序员 -- OC语言 基本语法 类 对象
- 黑马程序员——OC基础语法----类、对象、方法
- 黑马程序员——OC基础---OC特有语法
- 黑马程序员-IOS-OC基础-OC简介及基本语法
- 黑马程序员-IOS-OC基础-OC简介及基本语法
- 黑马程序员-OC语言基础:OC特有语法
- linux ssh配置免密登陆后还需要输入密码
- 线程与进程的区别
- 关于fb0和fb1联动设置的问题
- [前端] clientWidth offsetWidth scrollWidth scrollTop scrollLeft 与 clientX pageX offsetX 解析
- 剖析Android 线性布局中的权重(layout_weight)(解答疑惑)
- 黑马程序员——OC语言基础篇---基本语法、类
- CSS选择器的权重与优先规则
- python 处理文件
- Android BLE 开发心得 UUID获取。
- Zabbix的学习过程--zabbix客户端
- XproerIM V2开源,基于XproerUI界面库构架
- Architecture 学习初步
- 在 Tomcat 中部署 Java Web 程序 ( jar cvf *.war */. ) war 包
- Paraview Parallel模式下的文件解析(一)