MyException - 我的异常网
当前位置:我的异常网» 移动开发 » Object-C学习(1)

Object-C学习(1)

www.MyException.Cn  网友分享于:2013-08-10  浏览:33次
Object-C学习(一)
引用:http://blog.csdn.net/huanglx1984/article/details/4290437



objective c是一种c语言的变种,所以有时候在objective c中能看到写c语言的影子。

先列举几个浅显的objective c和c 的不同之处吧

1. objective c使用 nil 来表示 NULL



2. objective c用 YES NO 来表示 true false



3. objective c用 #import<stdio.h> 而不是#include<stdio.h>来包含头文件



4. 在objective c中,我们称类的方法(method)为消息(message)。在C++中,我们这样来调用方法: aClass->function(var); 但是在objective c中,我们使用 [aClass function:var]

objective c中的消息(message)比较有意思的特点是:

1) 调用消息的类可以不知道如何响应这个消息。如果它不知道如何处理这个消息,它会自动的将这个消息转给其他的类,比如它的父类;

2)调用消息的类可以是nil。在C++中,在使用类方法之前,我们都需要检查对象是否为空,所以在实现析构函数的时候,常会有如下的代码,如if (var) { delete var; } 但是在objective c中,我们就可以直接写[var release];  即使var == nil, 也不会有问题。



照着老规矩,先写个hello world

#import <stdio.h>

int main( int argc, char* argv[] ) {

   printf( "hello world/n" );

   return 1;


}



确实跟C很像吧。但是也不其然,objective c是一个很好的面向对象的语言。跟C还是有挺多不同之处。



我们先实现一个简单的类。

// Sample.h


#import <Foundation/NSObject.h>

@interface Sample: NSObject {

   int a;


}

- (void) print;

- (void) setA: (int)a;


@end



咱们一句一句来看。

#import <Foundation/NSObject.h>

在objective c中,所有的类都必须继承NSObject,这个概念很想Java里面的Object。



objective c声明类的格式如下:

@interface className: baseClassName {

   member variables;


}

member functions


@end



大家可能注意到objective c中函数的声明挺有特点的,我们现在来解释:

objective c的函数声明的基本格式如下

-/+ (return type) function_name;


-/+ (return type) function_name : (parameter type) parameter;

-/+ (return type) function_name : (parameter type) parameter1 otherParameter : (parameter_type) parameter2;

1) -/+: 这个称做scope, 如果在函数前面是- ,那么理解为一般的函数;如果是+, 可以理解为c++中的static函数

2) 函数的参数声明: objective c和 c++, java都很不一样。

如果没有参数的话,在函数名后面,可以什么都不写;

如果只有一个参数,在 : 后面声明参数的类型和名称;

如果有多个参数的话,每个参数前面都要有一个 : , 然后接着是参数类型和参数名称。可是大家可能还是觉得很奇怪。比如上面这个例子中, otherParameter 这个东西是干什么的呢?在objective c中,对于有多个参数的函数,我们可以理解为将函数的名称拆成了几个部分,每个部分都是对紧接着的参数的一个解释。比如在C++中:void initializeRectangle(int x1, int y1, int x2, int y2) , 但是我们并不知道这些参数都是什么意思;但是在objective c中,我们可以这样声明:void initializeRectangeWithLeftUpX: (int)x1 LeftUpY: (int)y1 RightBottomX: (int)x2 RightBottomY:(int)y2;

怎么样?有感觉了吧。



下面来实现这个简单的Sample类

// sample.m

#import <stdio.h>

#import "Sample.h"


@implementation Sample

- (void) print {

    printf( "%d/n", a );


}

- (void) setA : (int) aa {

   a = aa;


}


@end



使用这个类

#import "Sample.h"

int main( int argc, char* argv[] ) {

    Sample* smp = [[Sample alloc] init];

    [smp setA:1];

    [smp print];

    [smp release];


}

在objective c中,每一个类的对象都是一个指针,这和Java差不多(每个类的对象都用new声明)。alloc类似于C中的malloc, init是NSObject中的方法,用于初始化这个对象。如果我们实现了自己的初始化方法,也可以调用自己的初始化方法。使用完毕后,需要调用release释放空间。

在iPhone开发中,需要特别注意内存的管理。今后还会仔细些这部分的内容。

文章评论

10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
那些争议最大的编程观点
那些争议最大的编程观点
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
我是如何打败拖延症的
我是如何打败拖延症的
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员必看的十大电影
程序员必看的十大电影
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
中美印日四国程序员比较
中美印日四国程序员比较
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员的鄙视链
程序员的鄙视链
我的丈夫是个程序员
我的丈夫是个程序员
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
鲜为人知的编程真相
鲜为人知的编程真相
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
总结2014中国互联网十大段子
总结2014中国互联网十大段子
为什么程序员都是夜猫子
为什么程序员都是夜猫子
旅行,写作,编程
旅行,写作,编程
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
如何成为一名黑客
如何成为一名黑客
一个程序员的时间管理
一个程序员的时间管理
老程序员的下场
老程序员的下场
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
 程序员的样子
程序员的样子
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
10个调试和排错的小建议
10个调试和排错的小建议
程序员应该关注的一些事儿
程序员应该关注的一些事儿
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
每天工作4小时的程序员
每天工作4小时的程序员
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有