没有合适的资源?快使用搜索试试~ 我知道了~
Objective-C培训资料.pdf
4星 · 超过85%的资源 需积分: 10 10 下载量 88 浏览量
2013-03-20
12:49:39
上传
评论
收藏 307KB PDF 举报
温馨提示
试读
52页
Objective-C培训资料.pdf http://blog.csdn.net/shiyiyufen
资源推荐
资源详情
资源评论
Objective-C
Objective-C
Objective-C
Objective-C 培训教程
主要章节提示:
第 一 章 程序整体语法结构
第 二 章 数据类型
第 三 章 字符串
第 四 章 内存管理
第 五 章 对象的初始化
第 六 章 存取器
第 七 章 继承
第 八 章 动态绑定和 id 类型
第 九 章 分类和协议
第 十 章 属性列表
第十一章 复制对象
第十二章 归档
第一章
程序整体语法结构
程序的头文件和源文件的扩展名分别为 .h 和 .m 。 注释语法和 C
一样。
Object_C 中的 nil 相当于 NULL
。
Object_C 中的 YES 和 NO 相当于 true 和 false 。
这里再讲解一下 YES 和 NO :
Object-c 提供了 BOOL 类型, 但这个 BOOL 类型和 C++ 里的并不一样: 在 C++ 里一切非 0 值的东西 都
为 true ,而为 0 值的为 false 。但是 Object-c 里 1 为 true 并被宏定义为 YES , 0 为 false 并被宏定义为 NO
。
所以,如果读者写下面的代码,则肯定是错误的:
BOOL areIntsDifferent_faulty(int thing1,int thing2)
{
return (thing1-thing2);
}
if(areIntsDifferent_faulty(23,5) == YES)
{
}
因为 areIntsDifferent_faulty 方法返回的是两个整数的差 , 如果这个差不为 1 ,那么永远不会为 YES 。
先了解程序的结构 :
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init ];
NSLog(@"Programming is fun!");
[pool drain];
return 0;
}
#import <Foundation/Foundation.h>
相当于 #include 导入头文件 也有两种查找方式 < … > 和 " … " 。导入该头文件是因为在程序结尾处用
到的其他类和函数的有关信息
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init ];
这条语句为自动释放池在内存中保留了空间,就是在释放内存池的时候同时释放调其中的所有对象,
若对象要加入该池,只要发送一条 autorelease 消息。
NSLog(@"Programming is fun!");
将显示常量字符串,类似于 printf 函数, 并且它会自动在文本后面添加 '\n' 。 当然其中也可以使用转义
字符。例如还有
NSLog(@"The sum of 50 and 25 is %i",sum);
[pool drain]; / / 释放内存池
[classOrInstance method] ;
左方括号是类的名称或者该类实例的名称,空格后面是方法(即消息)
获得对象 :( 从 Car 类获得其对象 )
youCar = [Car new];
定义一个新类分为 2 部分:
@interface 部分
描述类、类的数据成分以及类的方法
@implementation 部分
实现这些方法的实际代码
@interface 部分的一般格式:
@interface NewClassName : ParentClassName
{
memberDeclarations;
}
methoddeclarations;
@end
命名规则: 以字母或下划线开头,之后可以是任何字母,下划线或者 0~9 数字组合,
约定: 类名以大写字母开头,实例变量、对象以及方法的名称以小写字母开始。
每次创建新对象时,将同时创建一组新的实例变量且唯一。注意:在对象类型的右边都有一个 *
号,
所有的对象变量都是指针类型。 Id 类型已经被预定义为指针类型,所以不需要加一个 * 号。
函数开头的( - )号或者( + )号表示:
( - ) 该方法是实例方法(对类的特定实例执行一些操作) ;
( + )是类方法(即对类本身执行某些操作的方法,例如创建类的新实例)
函数的声明示例:
- ( void ) setNumerator
: (
int ) n
第一个表示方法类型,返回类型,接着是方法名,方法接受的参数,参数类型,参数名
注: 如果不带参数则不用使用 “
:
” 号
如果没有指定任何返回类型, 那么默认是 id 类型, 所有的输入参数默认也是 id 类型 ( id 类型可用来引 用
任何类型的对象) 。
或许到现在你会认为将对象赋给 id 类型变量会有问题。
注: 无论在哪里,对象总是携带它的 isa 的保护成员(可以用来确定对象所属的类) ,所以
即使将它存储在 id 类型的通用对象变量中,也总是可以确定它的类。
具有多个参数的方法:
-/+ (return type) function_name : (parameter type) parameter1 otherParameter : (parameter_type) parameter2;
如果只有一个参数, 在 : 后面声明参数的类型和名称; 如果有多个参数的话,每个参数前面都要有 一
个 : , 然后接着是参数类型和参数名称。可是大家可能还是觉得很奇怪。比如上面这个例子中,
otherParameter 这个是什么意思,在 objective c 中,对于有多个参数的函数,可以理解为将函数的名称拆
成了几个部分,每个部分都是对紧接着的参数的一个解释。
如在 C++ 中:
void initializeRectangle(int x1, int y1, int x2, int y2) ;
但并不知道这些参数都是什么意思;但在 objective c 中,可以这样声明:
void initializeRectange: (int)x1 LeftUpY: (int)y1 RightBottomX: (int)x2
RightBottomY:(int)y2;
@implementation 部分的一般格式:
@implementation NewClassName
methodDefinitions;
@end
//NewClassName 表示的名称与 @interface 部分的类名相同。
一个简单的示例:
//*********************************************************************************
//Fraction.h 文件
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
{
int numerator ;
int denominator ;
}
- ( void ) print ;
- (void) setNumberator
:
(int) n;
- (void) setDenominator
:
(int) d;
@end
//Fraction.m 实现文件
@implementation Fraction
- ( void ) print
{
NSLog(@"%i/%i",numerator , denominator) ;
}
- (void) setNumberator
:
(int) n
{
numerator = n;
}
- (void) setDenominator
:
(int) d
{
denominator = d;
}
@end
//*********************************************************************************
Fraction * myFraction = [[Fraction alloc ] init ] ;
获得对象的实例并且初始化了其实例变量 (可以这样理解: 将 alloc 消息发送给 Fraction 类请求创建 一
个新实例,然后向新创建的实例对象发送 init
消息来初始化该对象) 。
另外一种方法:
Fraction * myFraction = [Fraction new] ;但是通常使用第一种方式
对象调用方法 [myFraction setNumerator : 1] ;
用完释放 Fraction 对象的方法: [myFraction release] ;
注: 创建一个新对象,都要请求分配内存,在完成对该对象的操作时,必须释放其所用的内存空间
i
i
i
i Phone
Phone
Phone
Phone 平台不支持垃圾回收机制
外部要访问实例变量需要通过类的方法来检索其值,不能直接访问
示例:
//*********************************************************************************
//Rectangle.h 文件
@interface Rectangle : NSObject
{
int width ;
int heigth ;
}
@property int width , heigth ;
- ( int ) area ;
- ( int ) perimeter ;
- ( void ) setWidth
: (
int ) w andHeigth
: (
int ) h ;
@end
//Rectangle.m 文件
#import "Rectangle.h"
@implementation Rectangle
@synthesize width , heigth ;
- ( void ) setWidth
: (
int ) w andHeigth
: (
int ) h
{
width = w ;
heigth = h ;
}
- ( int ) area
{
return width *heigth ;
}
- ( int ) perimeter
{
return ( width +heigth ) *2 ;
剩余51页未读,继续阅读
资源评论
- zczhfor2013-03-21正在找OBJECTIVE资料
- QQ4517544712014-02-20挺好的,有用
acorld
- 粉丝: 222
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功