一 建立一个OC的类

完整的写一个函数:需要函数的声明和定义。

完整的写一个类:需要类的声明和实现。

1.类的声明

声明对象的属性和行为

 #import <Foundation/Foundation.h>

 @interface Car : NSObject
{
@public
int speed;//速度
int wheels;//轮子
} - (void) initSpeed:(int)speed withWheels:(int) wheels ; - (void) run; @end

第3行:NSObject目的是让Car这个类具备创建对象的能力。

第5行:@public 可以让外部的指针间接访问对象内部的成员变量。

第 6,7行:定义对象的属性。

第10行:定义一个有入参的行为。

第12行:定义对象的行为。只要是OC对象的方法,必须以减号 - 开头。

在OC方法返回值中任何数据类型都必须用小括号()扩中。

实现@interface中声明的方法。

2.类的实现

Car 类的实现。

 #import "Car.h"

 @implementation Car

 - (void)run{
NSLog(@"车子跑起来。车速是%d km/h,轮子数是%d", speed, wheels );
} - (void)initSpeed:(int)speed withWheels:(int)wheels{
self -> speed = speed;
self -> wheels = wheels;
} @end

第9行代码: 给对象的属性speed, wheels赋值初始值。不能在类的声明 @interface 中对属性就行初始化。

在xcode中,自动实现函数的实现:

  输入 "-" , 然后输入函数的头几个字母,选中xcode自动弹出的方法。

3.类的调用

 #import <Foundation/Foundation.h>
#import "Car.h" int main(int argc, const char * argv[]) {
Car *car = [Car new];
car -> wheels = ;
car -> speed = ;
[car run]; [car initSpeed: withWheels:];
[car run]; return ;
}

第5行:在OC中,想执行一些行为,就接上一个中括号[行为执行者 行为名称] 。利用类来创建对象。

[Car new]会创建出一个新对象,并且会返回新对象本身(新对象的地址)。

第6,7行:给 car所指向对象的wheels,speed属性赋值。

第8行:给car所指向的对象发送一条run消息。

二对象与函数参数

例子1

 #import <Foundation/Foundation.h>
#import "Car.h" void test1(Car *newC){
newC -> wheels = ;
} int main(int argc, const char * argv[]) {
Car *car = [Car new];
car -> wheels = ;
car -> speed = ;
[car run]; test1(car );
[car run]; return ;
}

第16行代码的返回结果为:车子跑起来。车速是100 km/h,轮子数是5

内存图如下:

例子2

 #import <Foundation/Foundation.h>
#import "Car.h" void test2(Car *newC){
Car *c2 = [Car new];
c2 -> wheels = ;
c2 -> speed =; newC = c2;
newC -> wheels = ;
} int main(int argc, const char * argv[]) {
Car *car = [Car new];
car -> wheels = ;
car -> speed = ;
[car run]; test2( car );
[car run]; return ;
}

第20行代码的返回结果为 车子跑起来。车速是100 km/h,轮子数是4

内存图如下:

面向对象封装的好处:

1)更加接近人类的思考方式。

2)只需要关注对象,不需要关注步骤。

三 OC对象的类型判断

 #import <Foundation/Foundation.h>

 @interface A: NSObject

 @end

 @implementation A

 @end

 @interface B : NSObject

 @end

 @implementation B

 @end

 int main(int argc, const char * argv[]) {
A *a = [[A alloc]init];
NSLog(@"%d" , [a isKindOfClass:[NSObject class]]);
NSLog(@"%d" , [a isKindOfClass:[A class]]);
NSLog(@"%d" , [a isKindOfClass:[B class]]); return ;
}

返回结果

 -- ::18.105 T3[:]
-- ::18.106 T3[:]
-- ::18.106 T3[:]

IOS基础之 (四) OC对象的更多相关文章

  1. iOS 基础 第四天(0809)

    0809 - 内存管理,只对oc对象生效. alloc.retain.release.retainCount 局部变量是放在栈里面的,oc对象是放在堆里面的.栈里面的内容系统自动回收,而堆里面的内容还 ...

  2. IOS基础之 (一) OC基础语法

    一 OC语法 1.关键字 基本上所有关键字都是以@开头,比如: @interface , @implementation, @end, @public, @protected, @private 2. ...

  3. ios学习之旅--oc对象的关系

    1.匿名对象:就是没有名字对象     1.匿名对象仅用一次     使用场景:     1.当我们仅仅要调用一个对象的某个方法一次的时候能够使用匿名对象 2.匿名对象能够作为函数的实际參数 #imp ...

  4. IOS学习之路--OC的基础知识

    1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...

  5. iOS - 基础知识总结(OC版) 面试必看 再不看就要用swift了

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装.继承.多态.它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).总体来讲,OC确实是一门不错 ...

  6. 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法

    四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...

  7. iOS下JS与OC互相调用(四)--JavaScriptCore

    前面讲完拦截URL的方式实现JS与OC互相调用,终于到JavaScriptCore了.它是从iOS7开始加入的,用 Objective-C 把 WebKit 的 JavaScript 引擎封装了一下, ...

  8. iOS进阶一OC对象的本质

    OC对象的本质 平时编写的Object-C代码,底层实现其实都是C/C++代码. 所以Objective-C的面向对象都是基于C/C++的数据结构实现的,OC对象内部可以容纳不同数据类型的数据,因此可 ...

  9. iOS Foundation框架 -3.利用NSNumber和NSValue将非OC对象类型数据存放到集合

    1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...

随机推荐

  1. Xcode6与Xcode5中沙盒的变动以及偏好设置目录的变动

    1.Xcode6模拟器路径与Xcode5模拟器路径对比: (1)Xcode5中模拟器路径为:/Users/用户名/Library/Application Support/iPhone Simulato ...

  2. CentOS 7设置网络开机自动连接

    用root登陆系统 修改/etc/sysconfig/network-scripts/ifcfg-enpxxxxxx(xxx)文件,其内容原本如下 TYPE=Ethernet BOOTPROTO=dh ...

  3. ZooKeeper学习第七期--ZooKeeper一致性原理

    一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示. 图 1.1 ZooK ...

  4. 通过数据库方式访问excel 2007及其以后(xlsx)文件的连接字符串

    sqlconn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\test3.xls;Extended Properties=&q ...

  5. Java中sleep()和wait()的区别

    1. 这两个方法来自不同的类,sleep方法属于Thread,wait方法属于Object. 2. 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法. ...

  6. Spring Cache和MyBatis的使用

    1.http://www.importnew.com/22757.html    spring chache缓存的使用. 2.http://www.importnew.com/22783.html   ...

  7. SDAccel-FPGA将带来至多25倍单位功耗性能提升

    很久没有看FPGA了,本来想继续学习HLS,就上Xilinx的网站看了看.结果发现了SDx 开发环境,很新的一个东西.由于我对这方面了解不多,本篇博文仅仅只是资料的整合和介绍. 1.SDx开发环境 X ...

  8. [转]MySQL Explain详解

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有 ...

  9. ORA-00911: 无效字符

    思路:遇到这样问题首先第一步:将有误sql粘至数据库运行一下,如果报错,说明sql存在问题. 第二步:数据库没问题.那么就要想你的书写方式是否正确,是否是ibatasi里的写法,或许是多了个 :  或 ...

  10. 分页pagination实现及其应用

    1.分页jquery.page.js //分页插件 /** 2014-08-05 ch **/ (function ($) { var ms = { init: function (obj, args ...