黑马程序员------object-c简史及对比基本语法与其他语言的不同
2014-10-04 19:56
471 查看
知识要点:obj-c背景,cocoa,Foundation,AppKit,UIKit
object-c:开发ios的语言,属于编译类的语言,(java既是解释型语言也是编译型语言),它需要通过编译,连接,才能运行,这点和c/c++语言是一样,但不同的是,比c语言多了面向对象,可以说c语言的超集,而和c++面向对象的特性也不同,oc的面向对象给人的感觉又有点像c#,java。oc是动态语言,简单来说在运行期间可以替换对象和对象的方法。oc还有反射机制。
cocoa:苹果公司提供的函数库,其他语言可以用桥接的方式调用,例如:RoboVM ,可以用java开发ios程序
foundation:是具体的框架,在oc程序中#import这里的头文件,它的功能是提供系统基本服务,例如:集合,日期和时间对象,操作URL流等功能
UIKit:所有的ios都基于这个类,它提供界面的绘制,事件响应,类似于java的swing。
AppKit:这个是做mac应用的工具类。
一些语法规则:
1.减号:减号表示一个函数、或者方法
2.中括号:就是用来调用写的这个方法,通常在oc里说“消息”
3.#import相当于c语言的#include,用来引库函数的。
4.还有一写面向对象语法@interface
@implementation
5.BOOL类型是YES,NOT,不是ture,false
6.nil,相当于c语言的NULL,#define nil NULL
7.id,相当于c的泛型指针void *
8.oc的特殊语法规则有block,以^作为标记(在遍历NSArray时有用到)
10.@property和@synthessize
Java中可以用Eclipse工具把生成getter,setter方法。
property用来自动生成getter,setter方法的声明,用于访问类的属性。
synthesize是自动生成getter,setter方法。
(1)在使用@synthessize时,赋成员变量,如果不存在可以自动生成private类型的成员变量。只能用在@interface间。
(2)如果光写@property的声明,会自动生成实现方法。(新特性)
(3)如果在@synthesize中不赋值,那么它默认选择_xxx(xxx是声明的名字)。只能用在@implementation中
11.Category 分类
用于类的分割,就是可以把类可以按功能在划分。
(1)分类只增加方法,不能增加成员变量
(2)分类方法中可以访问原来类中声明的成员变量
(3)分类可以重新实现原来类中的方法,但会覆盖掉原来的方法,原方法无法使用
(4)方法调用优先级:分类(最后与编译的分类优先)
object-c:开发ios的语言,属于编译类的语言,(java既是解释型语言也是编译型语言),它需要通过编译,连接,才能运行,这点和c/c++语言是一样,但不同的是,比c语言多了面向对象,可以说c语言的超集,而和c++面向对象的特性也不同,oc的面向对象给人的感觉又有点像c#,java。oc是动态语言,简单来说在运行期间可以替换对象和对象的方法。oc还有反射机制。
cocoa:苹果公司提供的函数库,其他语言可以用桥接的方式调用,例如:RoboVM ,可以用java开发ios程序
foundation:是具体的框架,在oc程序中#import这里的头文件,它的功能是提供系统基本服务,例如:集合,日期和时间对象,操作URL流等功能
UIKit:所有的ios都基于这个类,它提供界面的绘制,事件响应,类似于java的swing。
AppKit:这个是做mac应用的工具类。
一些语法规则:
1.减号:减号表示一个函数、或者方法
2.中括号:就是用来调用写的这个方法,通常在oc里说“消息”
3.#import相当于c语言的#include,用来引库函数的。
4.还有一写面向对象语法@interface
@implementation
5.BOOL类型是YES,NOT,不是ture,false
6.nil,相当于c语言的NULL,#define nil NULL
7.id,相当于c的泛型指针void *
8.oc的特殊语法规则有block,以^作为标记(在遍历NSArray时有用到)
void (^printBlock)(NSString *x); printBlock = ^(NSString* str) { NSLog(@"print:%@", str); }; printBlock(@"hello world!");9.protocol,协议类似于接口的概念@require是必须要实现的@option可以不实现
#import <Foundation/Foundation.h> @protocol action <NSObject> @required -(void) eat; -(void) run; -(void) walk; -(void) say; @option -(void) code; -(void) paint; -(void) playGame; @end
#import "action.h" @interface Person : NSObject <action> @end @implementation Person -(void) walk { NSLog(@"The person walk"); } -(void) run { NSLog(@"The person run"); } -(void) say { NSLog(@"The person say"); } -(void) eat { NSLog(@"The person eat"); } -(void) code { NSLog(@"The perosn code"); } @end
10.@property和@synthessize
Java中可以用Eclipse工具把生成getter,setter方法。
property用来自动生成getter,setter方法的声明,用于访问类的属性。
synthesize是自动生成getter,setter方法。
(1)在使用@synthessize时,赋成员变量,如果不存在可以自动生成private类型的成员变量。只能用在@interface间。
(2)如果光写@property的声明,会自动生成实现方法。(新特性)
(3)如果在@synthesize中不赋值,那么它默认选择_xxx(xxx是声明的名字)。只能用在@implementation中
@interface Monkey:NSObject{ int _age; NSString *_name; } @property int _age; @property NSString* _name; @end @implementation Monkey @end int main(int argc, const char * argv[]) { Monkey *monkey = [Monkey new]; [monkey set_age:4]; [monkey set_name:@"Jill"]; return 0; }注:如果是自动生成getter、setter方法的对象,那么自动方法实现会是这个样子的
-(void)setHeart:(Heart *) heart { if(_heart != nil) { [_heart release]; _heart = [heart retain]; } }先释放旧对象,在申请新对象资源。不然原来资源没有释放,_herat指向了新的内存块,旧的那块没有释放,发生内存泄露。
11.Category 分类
用于类的分割,就是可以把类可以按功能在划分。
@interface Monkey:NSObject{ int _age; NSString *_name; } @property int _age; @property NSString* _name; @end @implementation Monkey @end @interface Monkey(Man) @end @implementation Monkey(Man) -(void) play { NSLog(@"公星星在玩"); } @end int main(int argc, const char * argv[]) { Monkey *monkey = [Monkey new]; [monkey set_age:4]; [monkey set_name:@"Jill"]; [monkey play]; return 0; }
(1)分类只增加方法,不能增加成员变量
(2)分类方法中可以访问原来类中声明的成员变量
(3)分类可以重新实现原来类中的方法,但会覆盖掉原来的方法,原方法无法使用
(4)方法调用优先级:分类(最后与编译的分类优先)
相关文章推荐
- 黑马程序员_iOS开发C语言基础基本语法易错点
- 黑马程序员——OC语言------基本语法
- 黑马程序员—C语言笔记—了解Mac的基本使用和C语言基础语法
- 黑马程序员——05C语言语法和mac基本快捷键使用
- 黑马程序员————C语言基本语法(数组、字符串、指针、其他数据类型)
- perl基本语言语法(与java,c#不同的地方积累)
- 黑马程序员——C语言基础语法、基本运算理论
- 黑马程序员——06C语言基本语法
- 黑马程序员——OC语言基础篇---基本语法、类
- [黑马程序员]12[OC语言]OC基本语法部分学习笔记总结
- 黑马程序员——C语言基础语法--scanf函数、基本运算、流程控制
- 黑马程序员——OC语言基本语法
- 黑马程序员_第一天视频学习 了解mac的基本使用和c语言基础语法
- perl基本语言语法(与java,c#不同的地方积累)
- Fortran语言 基本语法
- C 语言基本语法示例
- java基础学习篇——2、java语言的一些基本语法
- javascript语言中的左花括号和其他语言的位置不同的原因之一
- ASP脚本语言jscript基本结构与语法