Objective-C 知识点一
来源:互联网 发布:傅园慧网络直播视频 编辑:程序博客网 时间:2024/04/28 12:18
1..#import
#import 类似于C语言中的#include 。
C语言中用#ifdef命令来避免一个文件重复包含的情况。
而#import实现了这个功能。
2..NSLog()函数
NSLog()和C语言中的printf()类似。
3..@符号
@”字符串”——说明这是一个@NSString元素,也就是Cocoa的字符串。
NSString有很多特性:
- 告知其长度。
- 将自身与其他字符串比较。
- 将自身转换为整型值或浮点值。
若将“c风格字符串”传递给NSLog(),会报错。
4..布尔类型YESor NO
Objective-c中的BOOL和C语言中的bool不同
C语言 FALSE 为0 TRUE 为非0
obj-c NO 8字节的最低位为0 YES 8字节的最低位为1,例:2转换二进制00000010,为NO.
5..关于类的一些内容
.h文件中,定义一个继承了NSObject类的Circle类
@interface Circle : NSObject
@end
.m文件中,Circle的实现
@implementation Circle
@end
@interface Circle : NSObject{ ShapeColor fillColor;//类的变量或属性,如int a;int b; ShapeRect bounds;}- (void) setFillColor: (ShapeColor) fillColor;//冒号也是方法名,名字是setFillColor:- (void) setBounds: (ShapeRect) bounds;- (void) draw;//- (void) 是实例方法,只有定义了这个类的实例,才能用实例调用这个方法//+ (void) 是类方法(相当于静态方法),用类名可以直接调用这个方法@end // Circle @implementation Circle- (void) setFillColor: (ShapeColor) c{ fillColor = c;} // setFillColor- (void) setBounds: (ShapeRect) b{ bounds = b;} // setBounds- (void) draw{ NSLog (@"drawing a circle at (%d %d %d %d) in %@", bounds.x, bounds.y, bounds.width, bounds.height, colorName(fillColor));} // draw@end // Circle
- @interface:定义类的公共接口。
- @implementation:提供类接口的实现。
- @end:表示完成了接口的定义。
- Circle: :类名称。
- NSObject:说明Circle是基于NSObject类的。
- 花括号:括号内的是数据成员。
- 语法:(方法的数据类型) 函数名: (参数1数据类型) 参数1的数值的名字 参数2的名字: (参数2数据类型) 参数2值的名字 … ;
- 减号:用于区分函数原型与方法声明。
- (void):表示返回值的类型,void说明无返回值
6.self = this(c++中),super相当于调用父类的方法
[self setName];
相当于this->setName();[super setName]
相当于调用父类的setName方法
7.
@interface Shape : NSObject{ ShapeColor fillColor; ShapeRect bounds;}- (void) setFillColor: (ShapeColor) fillColor;- (void) setBounds: (ShapeRect) bounds;- (void) draw;@end // Shape @implementation Shape- (void) setFillColor: (ShapeColor) c{ fillColor = c;} // setFillColor- (void) setBounds: (ShapeRect) b{ bounds = b;} // setBounds- (void) draw{} // draw@end // Shape @interface Circle : Shape@end // Circle @implementation Circle// I'm new!- (void) setFillColor: (ShapeColor) c{ if (c == kRedColor) { c = kGreenColor; } [super setFillColor: c];} // setFillColor- (void) draw{ NSLog (@"drawing a circle at (%d %d %d %d) in %@", bounds.x, bounds.y, bounds.width, bounds.height, colorName(fillColor));} // draw@end // Circle
- 超类:所继承的类。(Circle的超类是Shape。)
- 父类:超类的另一种表达方式。(Shape是Circle的父类。)
- 子类:实施继承的类。(Circle是Shape的子类。)
- 孩子类:子类的另一种表达方式。(Circle是Shape的孩子类。)
- 重写:为了改变方法的实现。(如Circle具有自己的draw。)
8.isa
NSObject中有一个实例变量 isa 。它保存一个指向对象的类的指针,也就是对象的地址。(在内存中也就是基地址。)
Shape类型的对象有3个实例变量。
- isa(存储基地址。假设0×1000)
- fillColor
- bounds
每个方法调用时,都会获得self参数。self查找实例变量时,从isa开始。通过“基地址家偏移”的方式进行查找。
比如说,它要查找fillColor先从isa开始,也就是0×1000+0,isa是指针,大小为4个字节,所以下一个实例变量在起始地址(这里是基地址。)的4个偏移地址之后。也就是在0×1000+4,就是0×1004。这样就找到fillColor了。
9.description方法
description方法是基类NSObject所带的方法,在自定义的类中,我们可以重载该方法。
通过NSLog()可以使用%@格式说明符来输出对象。
NSLog()给这个对象发送描述消息,然后对象的description方法声称一个NSString并返回,之后NSLog()就输出这个返回的字符串。
-(NSString *)description()
{
return [NSString stringWithFormat:@"姓名: %@ 年龄: %d",name,age];
}
10.@class
通常引用一个类有两种办法:
一种是通过#import方式引入;另一种是通过@class引入;
@class好处:当上百个头文件都#import用一个文件的情况下,如果这个文件内容改变了,后面引用这个文件的所有类都要重新编译一边。@class就不会出现这个问题,所以@class效率会高一些
@class是放在@interface中的(就是.h),只是在引用一个类,将这个被引用类作为一个类型,在实现文件中(就是.m),如果需要引用到被引用类的实体变量或者方法时,还需要使用#import方式引入被引用类。
11:一些有用的数据类型
typedef struct _NSRange{
unsigned int location;
unsigned int lenght;
}NSRange;
typedef struct _NSPoint{
float x;
float y;
}NSPoint;
typedef struct _NSSize{
float width;
float height;
}NSSize;
typedef struct _NSRect{
NSPoint origin;
NSSize size;
}NSRect;
用Cocoa提供的快捷函数,以上四个都差不多
NSSize size = NSMakeSize(10, 20);
NNString字符串
NSMutableString是可变的,是NSString的子类
NSArray数组
NSArray不可变,NSMutableArray可变
NSEnumerator NSEnumerator是用来描述迭代集合运算的方式
NSDictionary字典
NSMutableDictionary可变字典
以上数组字典等 nil值代表结束,就像字符串的‘\0’
NSNumer 用于包装基本类型。
NSValue NSValue可以包装任意值。NSNumber是NSValue的子类,可以将用NSValue将结构放入NSArray和NSDictionary中。
NSNull 解决无法在集合中放入nil值
- Objective-C 知识点一
- Objective-C知识点总结(一)
- Objective-C知识点汇总
- Objective-C语言知识点
- Objective-C 知识点
- Objective-C关键知识点
- Objective-C 知识点总结
- Objective-C基础知识点
- Objective-C基础知识点
- Objective-C基础知识点
- Objective-C基础知识点
- Objective-C基础知识点
- Objective-C基础知识点
- Objective-C知识点总结
- 【iOS开发干货】Objective-C基础知识点总结(一)
- objective-c知识点易混点总结
- Objective-C的重要知识点
- [笔记]Objective-C <一>
- iOS Quart 2D ------------> CGContextRef
- Android getDrawable返回ColorDrawable而不是BitmapDrawable
- ios开发UIView在iphone5下自适应问题
- 使用gist管理代码
- ovirt node的安装简介
- Objective-C 知识点一
- 未完成-你的WEP网络很安全?5分钟破解给你看
- 基于Predictive Parsing的ABNF语法分析器(十三)——rulelist、rule、rulename、define-as和elements
- Matlab R2013a 解决中文乱码问题(解决不支持中文的问题)
- AS3.0 鱼儿游动代码
- Lucene 4.0 介绍
- 利用cx_Freeze将py文件打包成exe文件(图文全解)
- 下载google code中源码的几个工具
- POJ 3189 Steady Cow Assignment【网络流】