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

@interface 代码

  然后再看看@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

@implementation 代码

  这里要说明一下,感觉这段代码的声明感觉有点像.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:];
[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

@interface中使用@property

  在详细的描述代码中使用@synthesize 测试代码如下:

#import "MyCar.h"

@implementation MyCar

@synthesize value;
@synthesize fValue;
@synthesize carName;
@synthesize en; @end

在@implementation中使用@synthesize

  4 @property中的attribute简单介绍

  readonly-只读,只能读取而不能设定值(不能用setXXXX的函式)。

  readwrite-可读可写(默认)。

  assign-在设值时替换新旧变量(默认)。

  retain-在设值时retain新的变量,release旧变量。

  copy-在设值时copy一份新变量,release旧变量。

  nonatomic-默认為atomic。

  简单介绍一下对象@property中attribute的几个属性值,后面详细介绍其区别

Object C学习笔记3-对象的使用和定义的更多相关文章

  1. Object C学习笔记24-关键字总结

    学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1.  #import #import <> 从syste ...

  2. Object C学习笔记24-关键字总结(转)

    学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1.  #import #import <> 从syste ...

  3. Object C学习笔记10-静态方法和静态属性

    在.NET中我们静态使用的关键字static有着举足轻重的作用,static 方法可以不用实例化类实例就可以直接调用,static 属性也是如此.在Object C中也存在static关键字,今天的学 ...

  4. Object C学习笔记18-SEL,@ selector,Class,@class

    本章是对上一章<<Object C学习笔记17-动态判断和选择器>>的一点补充,所以比较简单点. 一. SEL 类型 在上一篇介绍了几个方法,都只是介绍了其使用方式但是没有具体 ...

  5. Object C学习笔记17-动态判断和选择器

    当时学习Object C的时被人鄙视了一顿,说使用.NET的思想来学Object C就是狗屎:不过也挺感谢这位仁兄的,这让我学习的时候更加的谨慎.今天的学习笔记主要记录Object C中的动态类型相关 ...

  6. Python学习笔记_Python对象

    Python学习笔记_Python对象 Python对象 标准类型 其它内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比較 对象身份比較 布尔类型 ...

  7. Object C学习笔记22-#define 用法

    上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...

  8. Object C学习笔记21-typedef用法

    在上一章的学习过程中遇到了一个关键字typedef,这个关键字是C语言中的关键字,因为Object C是C的扩展同样也是支持typedef的. 一. 基本作用 typedef是C中的关键字,它的主要作 ...

  9. es6学习笔记-proxy对象

    前提摘要 尤大大的vue3.0即将到来,虽然学不动了,但是还要学的啊,据说vue3.0是基于proxy来进行对值进行拦截并操作,所以es6的proxy也是要学习一下的. 一 什么是proxy Prox ...

随机推荐

  1. 铁乐学python_day25_序列化模块

    铁乐学python_day25_序列化模块 部份内容摘自博客http://www.cnblogs.com/Eva-J/ 回顾内置方法: __len__ len(obj)的结果依赖于obj.__len_ ...

  2. springmvc 拦截器的使用小结

    /** * * * * 拦截器的作用: * 每个请求到达Controller之前,或者每个响应到达view之前,都可以进行拦截. * 1.全局日志(谁提交了请求,要做什么事) * 2.权限管理(每个请 ...

  3. svn检出项目,Project *** is already imported into workspace

    1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.如果从svn检出的项目   Import  ----  Existing Maven Pro ...

  4. php中查询时间

    在做查询过程中,例如要实现查上个月从第一天到最后一天的佣金(提成),那我们在程序实现过程中就要让程序在上个月的范围内查询,第一天是比较好办,但最后一天就不定,要去写段函数进行月份及年份判断来得出上个月 ...

  5. Take my breath away

    Take my breath away 编辑 目录 1简介 2翻唱简介 3歌词 ▪ 英文歌词 ▪ 中英文歌词 1简介编辑 <Take My Breath Away>(中文译为<带走我 ...

  6. Array.prototype.reduce 的理解与实现

    Array.prototype.reduce 是 JavaScript 中比较实用的一个函数,但是很多人都没有使用过它,因为 reduce 能做的事情其实 forEach 或者 map 函数也能做,而 ...

  7. Java基础知识强化107:DecimalFormat

    1. 引入: 如何控制输出数据的精度? >1. 使用Math.round方法 (1)Java如何把一个float(double)四舍五入到小数点后2位,4位,或者其它指定位数 ? 答:比如,如下 ...

  8. Spring实战 MethodInvokingJobDetailFactoryBean使用与分析

    定义一个Job类 public class OffsetsQuartz { public void jobQuartz() { String[] clusterAliass = SystemConfi ...

  9. 1015. [JSOI2008]星球大战【并查集】

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...

  10. redis key全量导出与导出指定前缀的key

    redis命令列表中有两种方法可以全量导出所有的key: (1)keys 由于redis是单线程的,使用keys会导致redis服务阻塞,不建议线上服务采用这种方式. (2)scan 命令,下面是使用 ...