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. mysql宕机,导致innodb_force_recovery恢复不了

    https://serverfault.com/questions/698038/mysql-innodb-recovery-from-datafiles https://serverfault.co ...

  2. U-Mail详解邮件营销优势及应用领域

    最近频频有营销人员向U-Mail小编咨询:邮件营销到底有什么好处呢?与此同时,还有不少人对邮件营销存在一定的误解:邮件营销是不是只给潜在消费者发送邮件推广商品呢?其实邮件群发的应用面非常广泛,可不仅仅 ...

  3. jprofiler9.2注册码

    jprofiler9.2注册码 2016-08-23 18:11 3658人阅读 评论(2) 收藏 举报 L-Larry_Lau@163.com#23874-hrwpdp1sh1wrn#0620 L- ...

  4. JNLP应用程序无法打开的解决办法

    JNLP应用程序无法打开: 1.控制面板-Java-Java 选项卡-查看.用户选项卡勾选对应版本JDK(没有就添加,路径填类似:D:\Program Files\Java\jre6\bin\java ...

  5. JSF标签之f:facet 的用法

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zkn_CS_DN_2013/article/details/33717091 f:facet标签用来 ...

  6. 20165318 2017-2018-2 《Java程序设计》第一周学习总结

    20165318 2017-2018-2 <Java程序设计>第一周学习总结 教材内容学习总结 第一章主要对Java平台进行了简单的介绍,并讲解了如何搭建Java环境. Java平台概论 ...

  7. Hive学习之路 (十一)Hive的5个面试题

    一.求单月访问次数和总访问次数 1.数据说明 数据字段说明 用户名,月份,访问次数 数据格式 A,, A,, B,, A,, B,, A,, A,, A,, B,, B,, A,, A,, B,, B ...

  8. Hive学习之路 (十)Hive的高级操作

    一.负责数据类型 1.array 现有数据如下: 1 huangbo guangzhou,xianggang,shenzhen a1:30,a2:20,a3:100 beijing,112233,13 ...

  9. Robot Framework自动化测试---Selenium API

    一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com chrome 浏览器对应的关键字: firefox FireFox ff internete ...

  10. 红米5/红米5 Plus逼出最强魅蓝Note6?降价后已成性价比神机

    从品牌到产品命名,小米旗下的红米与魅族旗下的魅蓝似乎是一对天生的对手,如今小米即将发布千元全面屏的红米5/红米5 Plus,暂时没有全面屏手机推出的魅蓝也拿出了自己的应对策略,魅蓝的办法简单粗暴:直接 ...