IOS基础之 (四) OC对象
一 建立一个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对象的更多相关文章
- iOS 基础 第四天(0809)
0809 - 内存管理,只对oc对象生效. alloc.retain.release.retainCount 局部变量是放在栈里面的,oc对象是放在堆里面的.栈里面的内容系统自动回收,而堆里面的内容还 ...
- IOS基础之 (一) OC基础语法
一 OC语法 1.关键字 基本上所有关键字都是以@开头,比如: @interface , @implementation, @end, @public, @protected, @private 2. ...
- ios学习之旅--oc对象的关系
1.匿名对象:就是没有名字对象 1.匿名对象仅用一次 使用场景: 1.当我们仅仅要调用一个对象的某个方法一次的时候能够使用匿名对象 2.匿名对象能够作为函数的实际參数 #imp ...
- IOS学习之路--OC的基础知识
1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...
- iOS - 基础知识总结(OC版) 面试必看 再不看就要用swift了
OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装.继承.多态.它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).总体来讲,OC确实是一门不错 ...
- 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法
四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...
- iOS下JS与OC互相调用(四)--JavaScriptCore
前面讲完拦截URL的方式实现JS与OC互相调用,终于到JavaScriptCore了.它是从iOS7开始加入的,用 Objective-C 把 WebKit 的 JavaScript 引擎封装了一下, ...
- iOS进阶一OC对象的本质
OC对象的本质 平时编写的Object-C代码,底层实现其实都是C/C++代码. 所以Objective-C的面向对象都是基于C/C++的数据结构实现的,OC对象内部可以容纳不同数据类型的数据,因此可 ...
- iOS Foundation框架 -3.利用NSNumber和NSValue将非OC对象类型数据存放到集合
1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...
随机推荐
- IOS定位服务的应用
IOS定位服务的应用 一.授权的申请与设置 二.定位服务相关方法 三.定位服务代理的相关方法 四.定位服务获取到的位置对象 五.航标定位得到的航标信息对象 IOS定位服务的应用 一.授权的申请与设置 ...
- Linux 进程与线程一(创建-关闭线程)
进程是一个实体.每一个进程都有他自己的内存地址段(heap,stack等等) 进程是执行中的程序. 程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体. 进程是操作系统中最基 ...
- hp_jetdirect 9100漏洞检测
#-*-coding=utf8-*- import socket import sys def main(): if len(sys.argv)<=1: print('Parameters er ...
- (OAF)jdeveloper集成log4j并将日志输出到指定文件并写入数据库
参考: How to configure Log4j in JDev 11g Ever wanted to use log4j in your adf project ? Well though Or ...
- Java开发环境的搭建
确定自己的操作系统版本并下载安装JDK 1.下载JDK windows系统: 右键我的电脑->属性;如下图: 2.下载JDK 下载地址:http://www.oracle.com/index.h ...
- 怎么样快速学习AngularJS?
其实AngularJS的官方网站首页的几个例子已经很好的展示了AngularJS的一些特性,下面我就从几个例子一步一步的讲解AngularJS吸引人的东西并且实际项目中是怎么使用ng的. 首先还是从第 ...
- 重新理解:ASP.NET 异步编程(转)
http://www.cnblogs.com/xishuai/p/asp-net-async-await-and-exception-handling.html 相关博文: 异步编程 In .NET( ...
- 在opencv3中实现机器学习算法之:利用最近邻算法(knn)实现手写数字分类
手写数字digits分类,这可是深度学习算法的入门练习.而且还有专门的手写数字MINIST库.opencv提供了一张手写数字图片给我们,先来看看 这是一张密密麻麻的手写数字图:图片大小为1000*20 ...
- CUDA编程学习(一)
/****c code****/ #include<stdio.h> int main() { printf("Hello world!\n); ; } /****CUDA co ...
- css兼容性的问题
https://www.douban.com/note/314793848/ 随意的一个博客ie6的兼容 这个博客比较好 http://blog.csdn.net/chuyuqing/article/ ...