-----------android培训、java培训、java学习型技术博客、期待与您交流!------------

(一)、语法概述

1、 oc介绍:(.m文件)

1> c语言的基础上,增加了一层小的面向对象语法;

2> 完全兼容c语言;

3> 可在oc代码中混入c代码,甚至c++代码;

4> 可使用oc开发mac os x平台和ios平台的应用程序;

2、Oc语法预览

1> 关键字:基本上所有关键字都以@开头;

2> 不以@开头的关键字:self 、super、_cmd、_block、_strong、_weak;

3> 字符串都以@开头;

4> 其它语法:

 基本数据类型  Char、int、float、double、BOOL(YES/BNO)
 Nil  相当于NULL,也就是0
 基本语句  循环语句(do while、while for)、条件语句(if、if else、switch)
 注释  // 和/*...*/
 屏幕输出  

3、Oc程序的开发过程

1> NSLog输出内容会自动换行;

2> 引入头文件:#import <**.h>;【import的用途:跟#include一样,拷贝文件内容,可自佛那个防止文件的内容被重复拷贝】;

3> 编译oc文件:cc **.o -framework Foundation

4> QuartzCore动画框架;

5> Foundation框架头文件路径:右击Xcode.app--显示包内容;Xcode.app/Contents/Developer/Platforms/iphoneOS.platform/Developer/SDKs/iphoneOS6.0.sdk/System/Library/Frameworks/Foundation.framework;

6> 主头文件:

。主头文件:最主要的头文件,名字一般跟框架名一样,包含了框架中的所有其它头文件;

。Foundation框架的主头文件名为Foundation.h;

。只需包含Foundation框架主头文件,就可试用整个框架的东西;

6> 运行过程:

。编写oc源程序:.m、.c;

。编译:cc -c xxx.m xxx.c;

。链接:cc xxx.o xxx.o -framework Foundation;【仅用到了框架才使用-framework】

。运行:./a.out

4、BOOL类型:(1:YES/ 0:NO)

1> BOOL /YES/NO全为大写;

2> BOOL类型的本质:typedef signed char BOOL;

3> BOOL取值:YES/NO;【#define YES (BOOL) 1 、#define NO (BOOL) 0】

4> BOOL输出(当整数用):NSLog(@”%d %i”,YES,NO);

5、NSLog与pritf区别:

1>  NSLog是接收oc字符串作为参数,pritf是接收c字符串作为参数;

2> NSLog输出后会自动换行,pritf输出后不会自动换行;

3> 使用NSLog需要#import <Foundation/Foundation.h>

4> 使用printf需要#include <stdio.h>

(二)、面向对象:(oc是面向对象,c是面向过程【面向过程:关注步骤】)

1、常用术语:

1> 面向过程:Procedure Oriented;

2> 面向对象:Object Oriented,简称 OO;

3> 面向对象编程:Object Oriented Programming,简称 OOP;

个重要概念:类与对象)

1> oc中的面向对象:

。Oc中的类相当于图纸,用了描述一类事物,想创建对象,必须先有类;

。Oc利用类来创建对象,对象是类的具体存在;

。面向对象解决问题应该是先考虑需要设计哪些类,再利用类来创建多少对象;

2>如何设计类:(拥有相同或类似属性和行为的对象都可抽象出一个类)

。事物名(类名);Person;【首字母大写,且无下划线,驼峰标识多个英文名】

。属性(成员变量/实例变量);height/age;

。行为(功能/方法):run/fight;

3> 类的声明:

成员变量

方法的声明

例:

@interface 类名 :NSObject

@public

成员变量;//不允许初始化,不允许变量1和变量2重复,不随便将成员变量加入satic;

方法的声明:-(void)方法名(有冒号的或有多个参数的则冒号或andNUM1:也是方法名的一部分);//OC方法中,一个参数对应一个冒号,例如:-(int) he : (int) num;或:-(int)sum: (int)num1:(int)num2===>-(int)si,WithNum1:(int)num1 andNum2:(int)num2;

@end

4> 类的实现:

@implementation 类名

//实现@interface中声明的方法

-(void)方法名

{

NSLog(@”成员变量为%d方法的实现”,speed);

}

@end

5> main函数的实现:

int main()

{

类名 *P = [类名 new];

P->成员变量=20;

[指针变量名P  方法名];

return 0;

}

3、类的声明和实现

1> 类的声明:(声明对象的属性、行为)

#import <Foundation/Foundation.h>

/*

* 类的声明

*/

//:NSObject目的是:让Car这个类具备创建对象的能力

@interface 类名 :NSObject

//@public:可让外部的指针间接访问对象内部的成员变量

//成员变量://不允许初始化,不允许变量1和变量2重复,不随便将成员变量加入satic;

@public

成员变量;//声明对象的属性(成员/实例变量,默认会初始化为0):(如:int speed;)

/*

* 对象的行为

*/

//方法(行为):方法名、参数、返回值(声明/实现)

//只要是OC对象的方法,必须以减号-开头

//OC方法中任何数据类型都必须用小括号()括住

//OC方法中的小括号:括住数据类型

-(void) run;

@end

2> 类的定义/实现:

/*

* 类的实现:用来实现@inteface中声明的方法

*/

@implementation 类名

//方法的实现

-(void) run()

NSLog(@”速度 为%d的车子类的run方法实现了!”,speed);

@end

3> main函数:

int main(){

//在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称],如[Car new]。

//利用类来创建对象

/*

* 例如:成员变量直接赋值:

*/

//定义一个指针变量P,P将来指向的是Car类型的对象;

//[Car new]每次都会创建出一个新对象,且会返回新对象本身(新对象地址);

Car * P = [Car new];

//给P所指向对象的speed属性赋值;

P->speed = 250;

//给P所指向对象发送一条run消息

[P run];

NSLog(@”Car 速度为%d”,P->speed);

return 0;

}

4、 对象简单内存分析: 使用类创建对象前([类名 new]),会将类加载进内存(仅第一次 使用时加载,且仅加载一次);

5、方法和函数的区别:

1> 对象方法都以减号 -;

2> 对象方法的声明必须卸载@interface与@end之间;

对象方法的实现必须在@implementation与@end之间;

3> 对象方法只能由对象来调用;

4> 对象方法归类/对象所有;

5> 函数能写在文件中的任意位置(@interface 和@end之间),函数归文件所有;

6> 函数调用不依赖于对象;

7> 函数内部不能直接通过成员变量来访问某个对象的成员变量;

6、类的合理设计:

7、方法的声明和实现:

1> 方法的声明:-(void)方法名(有冒号的或有多个参数的则冒号或andNUM1:也是方 法名的一部分);//OC方法中,一个参数对应一个冒号,例如:-(int) he : (int) num; 或:-(int)sum: (int)num1:(int)num2===>-(int)si,WithNum1:(int)num1  andNum2:(int)num2;

8、匿名对象:易造成内存泄漏;

1> Car *c=[Car new]; c->speed =300;==> [Car new]->speed=300===>[[Car new] run];

2>

9、学习方法:Xcode-->Help-->doumenct API--->眼睛,查看API文档;

10、API文档安装:

1> 直接放到Xcode中:/Applications/Xcode.app/Contents/Developer/Documentation/DocSets;

2> 放到硬盘的某个路径:/Users/用户名/Library/Developer/Shared/Documentation/DocSets;

11、

(三)、面向对象三大特性(成员的封装、继承、多态

1、封装:

1> set方法(成员变量去掉@public):提供一个方法给外界设置成员变量值,可在方法中对参数进行相应过滤;

① 命名规范:方法名必须以set开头、set后面跟上成员变量名称,成员变量的首字母必须大写、返回值必须为void、一定要接收一个参数,且参数类型与成员变量类型一致、形参的名称不能跟成员变量名;(例:- (void)setAge : (int) newAge;)

2> get方法:返回对象内部的成员变量;

① 命名规范:方法名跟成员变量名一致、肯定有返回值,返回值类型肯定与成员变量类型一致、不需接收任何参数;(例: - (int) age;)

② 只读成员变量(只允许外界访问,不允许修改):使用get方法返回变量值;

3> 成员变量的命名规范(一定要以下划线_开头):

① 好处:让成员变量和get方法的名称区分开、可跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量;

2、弱应用:OC是在程序运行过程中才会检测对象有没有实现相应的方法;

3、类方法(以+开头,例:+(void)printClassName):(对象方法:以-开头,例:-(void) Car);

1> 类方法调用时,可不使用指针New,,就可直接调用方法(例:[类名 printClassName]);

2> 对象方法与类方法

对象方法:以减号-开头、只能由对象类调用、对象方法中能访问当前对象的成员变量(实例变量);

类方法:以加号+开头、只能由类(名)调用、类方法中不能访问成员变量(实例变量)、可允许类方法名与对象方法名一致;

3> 类方法的好处:

不依赖于对象,执行效率高;

能用类方法尽量用类名;

使用场合:当方法内部不需要使用成员变量时,就可改为类方法;

4> ctrl+c退出死循环;

4、Self使用:(self是个指针,代表当前对象)

1> 概念:谁调用了当前方法,self就代表谁(如:self出现在对象方法中,self就代表对象;self出现在类方法中,self就代表类;);

2> 可利用self->成员变量名,访问当前对象内部的成员变量;

3> 调用方法:调用其它类方法/对象方法,如:[self 方法名];

4>

5、继承(代表类间的关系,父类/超类:supprtclass)

1> @interface Car :Person,其中:表示Car类继承了Person父类,相当于拥有了Person类中所有的成员变量及方法;

2> 继承的好处:抽取重复代码,建立了类之间的关系,子类可拥有父类的所有成员变量及方法;

3> 注意点:基本上所有类的根类为NSObject,NSProxy不是继承NSObject;

4> 使用继承注意点:

① 不允许子类和父类拥有相同名称的成员变量;

② 父类必须声明在子类前面;

③ 调用某个方法时,优先去当前对象中找,若找不到,然后去父类找;

④ 重写:子类重新实现父类中的某个方法,覆盖父类以前的做法;

5> 缺点:耦合性太强(两个类关联性太强了);

6> 继承的使用场合:

① 当两个类拥有相同属性和方法的时候,就可将相同的东西抽取到一个父类中;

② 当A类拥有B类中的部分属性和方法时,可考虑让B类继承A类;

6、组合:(A类中:B *_b; A类拥有B类组合)

1> 继承与组合的区别:继承--> XX是XXX;组合:XX类拥有XXX类;

2> A类中:B *_b; A类拥有B类组合;

7、Super关键字使用(与继承相关):

1> super作用:

① 直接调用父类中的某个方法;

② super处在对象方法中,那么就会调用父类的对象方法;

Super处在类方法中,那么就会调用父类的类方法;

2> 使用场景:子类重写父类的方法时想保留父类的一些行为;

3>

8、多态(多种形态):

1> 调用方法时会检测对象的真实形象;

2> 好处:若函数/方法参数中使用的是父类类型,可传入父类、子类对象;

3> 多态局限性:

① 父类类型的变量,不能用来调用子类的方法,必须强制转为子类类型变量后,才能直接调用子类特有的方法;

4> 没有继承就没有多态;

5> 代码体现:父类指针指向子类对象;

黑马程序员_ Objective-c 概述及面向对象与三大特性的更多相关文章

  1. 大数据-将MP3保存到数据库并读取出来《黑马程序员_超全面的JavaWeb视频教程vedio》day17

    黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day17-资料源码\day17_code\day17_1\ 大数据 目 ...

  2. 2016年8月17日 内省(1)18_黑马程序员_使用beanUtils操纵javabean

    8.内省(1):18_黑马程序员_使用beanUtils操纵javabean 1.导入两个包: 2.调用静态方法. 9.泛型 map.entrySet() :取出map集合的键值对组成一个set集合. ...

  3. 黑马程序员_高新技术之javaBean,注解,类加载器

    ----------- android培训.java培训.java学习型技术博客.期待与您交流! ---------- 第一部分 javaBean 一,由内省引出javaBean 1,内省: 内省对应 ...

  4. 黑马程序员_ JAVA中的多线程

    ------- android培训.java培训.期待与您交流! ---------- 尽管线程对象的常用方法可以通过API文档来了解,但是有很多方法仅仅从API说明是无法详细了解的. 本来打算用一节 ...

  5. JavaWeb开发之四:servlet技术 黑马程序员_轻松掌握JavaWeb开发之四Servlet开发 方立勋老师视频教程相当的经典

    总结: 记住:servlet对象在应用程序运行的过程中只创建一次,浏览器每次访问的时候,创建reponse对象 request对象,然后调用servlet的service方法,reponse对象和re ...

  6. 黑马程序员_ Objective-c 面向对象笔记详解

    1)类,对象,方法 类 类名: 1) 类名的第一个字母必须是大写 2) 不能有下划线 3) 多个英文单词,用驼峰标识 类的声明和实现 类的声明 @interface 类名 : NSObject { @ ...

  7. 黑马程序员_超全面的JavaWeb视频教程vedio--.ppt,.pptx,.doc,.txt,.docx列表

    \JavaWeb视频教程_day1-资料源码\day01-html目录.txt;\JavaWeb视频教程_day1-资料源码\PPT\HTML.ppt;\JavaWeb视频教程_day1-资料源码\资 ...

  8. 黑马程序员_<<TCP>>

    ---------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1. TCP/IP 1.概述 要建立连接, ...

  9. 黑马程序员_ Objective-c 之block、protocol学习笔记

    一):block学习总结 block :用来保存一段代码. 1.block 特点:  1> Block封装了一段代码,可以在任何时候执行   2> Block可以作为函数或者函数的返回值, ...

随机推荐

  1. POJ 1014 Dividing

    Dividing Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 66032 Accepted: 17182 Descriptio ...

  2. Angular.JS + Require.JS + angular-async-loader 来实现异步加载 angular 模块

    传统的 angular 应用不支持异步加载模块,必须在 module 启动的时候,所有模块必须预加载进来. 通过使用 angular-async-loader 库,我们可以使用 requirejs 等 ...

  3. 终于在cmd窗口里出现了颜色了!!!感动ing……

    在窗口的中央打印三行字. 要求: 第一行绿色字 第二行绿底红色 第三行白底蓝色 assume cs:code, ds:data data segment db 'welcome to masm!' d ...

  4. LeetCode() Symmetric Tree

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...

  5. 使用SAXReader读取ftp服务器上的xml文件(原创)

    根据项目需求,需要监测ftp服务器上的文件变化情况,并将新添加的文件读入项目系统(不需要下载). spring配置定时任务就不多说了,需要注意的一点就是,现在的项目很多都是通过maven构建的,分好多 ...

  6. memory corruption

    今天遇到了一个比较弱的问题,但是涉及到一些东西,所以记录一下. 问题表现为,系统BOSD,在析构函数进行free的时候,有的时候是在使用buffer的过程中就BSOD. 之前是怀疑因为分配的是page ...

  7. WIN7下搭建CORDOVA环境

    Cordova 环境搭建 1安装JDK 工具文件夹中:jdk目录 1)下载地址:http://www.oracle.com/technetwork/java/javase/downloads/inde ...

  8. 获取当前3Ds MAX版本

    昨天看到群里有人问,并贴出了飞浪大大的源码,又对比了一下自己以前写的,顿时觉得弱爆了哈哈~ 飞浪: fn getVer = ( v = (maxversion())[] / then return v ...

  9. 怎么样修改PHPStorm中文件修改后标签和文件名的颜色与背景色

    自从最近在PHPstrom里引入Git,并且使用MONOKAI_SUBLIME主题之后 ,当文件在PHPstrom中进行编辑,文档内容变化时,左侧项目文件列表中的文件名颜色以及右侧编辑区域标签卡的文件 ...

  10. Unity 相关经典博客资源总结(持续更新)

    就作为一个记录吧,把平时看过的Unity相关的一些好的Blog记录并分享. 好的论坛: Unity官方脚本  点评:这个不用说了,最核心的内容,理解整个Unity引擎的方方面面,梳理结构. Unity ...