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. IP地址分类和网段区分的知识

    IP地址分类/IP地址10开头和172开头和192开头的区别/判断是否同一网段 简单来说在公司或企业内部看到的就基本都是内网IP,ABC三类IP地址里的常见IP段. 每个IP地址都包含两部分,即网络号 ...

  2. 一、Linux概述 二、Linux的安装 三、Linux的常用命令(重点)

    一.Linux概述###<1>操作系统 OS,管理和控制 计算机的 硬件和软件资源的 计算机程序. 最基本的系统软件. 是用户和计算机交互的桥梁,是硬件和软件交互的桥梁. 操作系统:she ...

  3. 安全紧急预警-防范新型 Sigrun 勒索病毒

    近日,互联网上出现一种 Sigrun 勒索病毒,其通过垃 圾邮件.网站捆绑软件等方式进行传播.该病毒一旦植入到 用户的服务器,将把系统文件加密为.sigrun 的文件,进而 向受害者勒索虚拟货币.该新 ...

  4. n=n+1 放在print(s)的上面的影响 (2) n=n=+1在前面,则不满足前面<100条件时候,才跳出while的循环,这时候while循环结束, 到了外面的下一步-->print()

    1+2+3+....+100=     ? n=1 s = 0 while n < =100: s = s+n n= n+1 # n=n+1    在print(s)上面的情况 print(s)

  5. 2018.08.31 10:57 swift 学习心得

    其实我一直很喜欢swift,我觉得Xcode很先进,买了一台MacBook就可以操作了,蛮好的. var str = "Hello, playground" var myVaria ...

  6. MEMCACHE与REDIS

    千万数据量的高并发,容灾. Redis 基于单线程, 持久性 多数据类型 内存中只存KEY Redis支持数据的备份,即master-slave模式的数据备份. Redis与Memcached的区别 ...

  7. python处理数据(二)

    处理PDF文件 PyPDF2简介 作为 PDF 工具包构建的纯 python 库. 它可以:提取文档信息(标题,作者,... ...)一页一页地分割文件一页一页地合并文件裁剪页面将多个页面合并成一个页 ...

  8. 判断是否是微信浏览器JavaScript代码

    function isWeiXin(){     var ua = window.navigator.userAgent.toLowerCase();     if(ua.match(/MicroMe ...

  9. zookeeper环境搭建.md

    zookeeper 简介 ZooKeeper是一个为分布式应用所设计的分布的.开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布 ...

  10. AOP的核心:代理与织入

    分为两步: 1.动态生成代理类: 2.织入: 2.6 织入(Weaving) 织入是将增强添加到目标的具体连接点上的过程 . AOP 织入方式: 方式 实现 应用编译期织入 特殊的 Java 编译器. ...