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. Linux学习之路-2017/12/25

    三章  命令通配符 .PATH变量 支持多种文本的通配符 通配符                   含义 * 匹配零个或多个字符    ?   匹配任意单个字符 [0-9]   匹配范围内的数字 [ ...

  2. ELK搭建实时日志分析平台之一ElasticSearch搭建

    文:铁乐与猫 系统:CentOS Linux release 7.3.1611 (Core) 注:我这里为测试和实验方便,ELK整套都装在同一台服务器环境中了,生产环境的话,可以分开搭建在不同的服务器 ...

  3. T-SQL 标识符

    在T-SQL语言中,对SQLServer数据库及其数据对象(比如表.索引.视图.存储过程.触发器等)需要以名称来进行命名并加以区分,这些名称就称为标识符. 通常情况下,SQLServer数据库.数据库 ...

  4. 【问题记录】uwsgi部署并启动俩个几乎一样的python flask web app,发现有一个app响应时间非常长

    uwsgi在同一台linux上启动python flask web app(俩个), 发现第一个和第二个的简单性能测试差距非常大,差了将近一倍: 第一个结果: Concurrency Level: 1 ...

  5. 【转】 Android应用内多进程分析和研究

    正常情况下,一个apk启动后只会运行在一个进程中,其进程名为AndroidManifest.xml文件中指定的应用包名,所有的基本组件都会在这个进程中运行.但是如果需要将某些组件(如Service.A ...

  6. ethers.js-6-Low-Level API

    Low-Level API These are advanced, low-level API features that should, for most people not be necessa ...

  7. Sequelize-nodejs-10-Hooks

    Hooks钩子 Hooks (also known as lifecycle events), are functions which are called before and after call ...

  8. Alias自定义命令

    [root@localhost etc]# type home    --检查是否占用-bash: type: home: not found[root@localhost etc]# alias h ...

  9. 关于Python常用框架学习

    我对Python不是特别熟悉,我仅仅只知道它在Web自动化领域挺牛逼的,还有爬虫.当然了,现在的人工智能和机器学习用到它也很多. 记得六月还是七月份的时候,那个时候,突然心血来潮就开始学起了Pytho ...

  10. ping不通linux服务器排查

    很久没启动linux了,今天打开试了下 ssh  root@192.168.229.128 ping 一直超时 老规矩挨着来排查 检查网络设备器改为Net 模式 重启网络服务 service netw ...