Object C学习笔记3-对象的使用和定义
来源:互联网 发布:知乎是什么 编辑:程序博客网 时间:2024/05/16 13:47
Object C学习笔记3-对象的使用和定义
2014-01-24 09:56 by 贺臣, 1787 阅读, 3 评论, 收藏, 编辑
1. 如何定义一个对象
在面向对象的语言中,定义一个对象是使用Class关键字,而在Object-C中则是使用@interface,@interface用于定义对象的属性和方法,@implementation则用于对象的详细描述。@interface放在.h文件中,而@implementation放在.m的文件中。Object-C中的对象和java,.NET中的对象还是有区别的,其实它更加像C中的指针。
首先我们定义一个@interface 的对象,代码如下
#import <Foundation/Foundation.h>@interface Engine : NSObject{ int age; NSString* name;}-(void) setAge:(int)myage;-(int) getAge;-(void) setName:(NSString*)myname;-(NSString*) getName;@end
然后再看看@implementation具体对象详细
#import "Engine.h"@implementation Engine-(void) setAge:(int)myage{ age=myage;}-(int) getAge{ return age;}-(void) setName:(NSString*)myname{ name=myname;}-(NSString*) getName{ return name;}@end
这里要说明一下,感觉这段代码的声明感觉有点像.NET或者Java中的接口和接口的实现,的确是这样的。在Object-C中这是类的定义方法,至于接口的定义是使用其他的方式来定义的,后面再说明。
在定义对象的时候,我们定义了对象的get 和 set方法,这点和面向对象语言方式一样。但是get/set方法的定义太麻烦,还有更加简单的方式在下面介绍.
2. 对象的使用
在使用对象之前我们需要先实例化一个对象实例,实例化对象实例有两种方式:
(1) [对象 new] 如 Engine* en=[Engine new];
(2) [[对象 alloc] init] 如 Engine* en=[[Engine alloc] init];
看看下面这段测试代码
Engine* en=[[Engine alloc] init]; [en setAge:88]; [en setName:@"hechen"]; int age=[en getAge]; NSString* name=[en getName]; NSLog(@"------------直接输出赋值---------------"); NSLog(@"age:%i ; name:%@",age,name); NSLog(@"------------直接输出赋值---------------"); NSLog(@"age:%i ; name:%@",[en getAge],[en getName]);
3. @property 的使用
@property是一种代码生成机制,能够生成不同类型的getter和setter方法。如果在Object-C中想要用. 操作来获取对象属性值和属性设置值就要使用@property.
@property使用的语法规则如下:
@property(attribute1,attribute2) type value;
如: @property (nonatomic) NSString* carName;
@property 要和@synthesize一同使用,测试代码如下:
#import <Foundation/Foundation.h>#import "Engine.h"@interface MyCar : NSObject{ int value; float fValue; NSString* carName; Engine* en;}@property (nonatomic) int value;@property (nonatomic) float fValue;@property (nonatomic) NSString* carName;@property (retain) Engine* en;@end
在详细的描述代码中使用@synthesize 测试代码如下:
#import "MyCar.h"@implementation MyCar@synthesize value;@synthesize fValue;@synthesize carName;@synthesize en;@end
4 @property中的attribute简单介绍
readonly-只读,只能读取而不能设定值(不能用setXXXX的函式)。
readwrite-可读可写(默认)。
assign-在设值时替换新旧变量(默认)。
retain-在设值时retain新的变量,release旧变量。
copy-在设值时copy一份新变量,release旧变量。
nonatomic-默认為atomic。
简单介绍一下对象@property中attribute的几个属性值,后面详细介绍其区别
- Object C学习笔记3-对象的使用和定义
- Object-c 对象的使用和定义
- Object-C学习笔记(一):类的定义
- <C++>10.对象的定义和使用
- Object-C 学习笔记(三十)--- 归档(3)---对象归档
- Object-c学习笔记十一-----对象初始化
- Object C 类的定义和实现
- Object-C: 学习实例3 使用集合对象
- 《Ext江湖》学习笔记--JS中变量、对象和数组的定义与使用
- Object-C学习笔记(二)-----对象的创建和类方法的调用
- Android学习笔记3 使用Intent传递复杂的数据(对象,List<Object>等)
- Objective-C学习笔记(十八)——对象方法和类方法的声明,定义及调用
- object-c学习 - object-c和c的布尔类型
- scala学习笔记3-Actor、case class和object、loop和react的使用
- Object-C学习笔记
- object-c学习笔记
- Object-C学习笔记
- Object-c学习笔记
- MATLAB中feval、class、'function_handle'、isa、strcmp的用法
- 基于FSL的DTI数据预处理流程
- mybatis中关于sqlMapConfig配置
- Java程序员应当掌握的排序算法
- python openpyxl读写excel
- Object C学习笔记3-对象的使用和定义
- Linux学习笔记(06-11)线程优先级
- Qt图形框架资料07 -- Qt图形视图QGraphicsItem类
- nand flash控制器
- 提高C++程序运行效率的10个简单方法
- programming-challenges Crypt Kicker (110204) 题解
- session机制详解以及session的相关应用
- Interview Q&A - 合并两个有序数组为一个有序数组(C++)
- lua -- encode and decode