本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点。建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再将零散的知识点整理出来。这样的学习方法会带来更多的收获,同时要多做练习,按照思路,默写、改写代码。在这里,感谢欧阳坚老师,学习你的课程使我走上了ios的开发之路。

一定要明确一个要从事的方向,要不然就会感到迷茫。学习ios开发,并且从事ios开发这个行业,这就是我的选择。看到我的博客系列文章,其中大多是关于C++、Qt、Linux网络编程、OpenGL、Unity3D等方面。从表面上看和ios开发似乎没有多少关联,但是有了这些方面的学习经验给我带了一定的基础。ios开发主要用oc和swift语言,而oc是从事ios开发的基础。众所周知,oc(objective-c)即面向对象的C,在C语言的基础上增加了面向对象的机制和内存管理这一对翅膀,使得OC在做ios开发如虎添翼。

本系列文章仅供个人学习和分享给志同道合的猿友,不存在商业用途。

OC是一门面向对象的语言,既然是面向对象就少补了类和对象。我们知道在C++中面向对象的三大机制:继承、封装、多态,这在OC中也同样具备。下面就具体说一下OC中的类和对象。

类的定义

类是由属性和方法组成的,属性表示类的特征,方法表示类的动作。

类的定义格式

OC中的类定义和C++中的类定义有些不同,在OC中类的头文件为***.h,而源文件却是以.m为后缀的文件-***.m。

接口在头文件中:

@interface 类名:基类名称{
//属性名称
}//这里不加";"号
//方法声明
@end//声明结束

类名首字母需要大写,NSObject是OC所有类的基类,接口中只包含方法的声明,方法有类方法和实例方法。

实现在源文件中:

@implementation 类名
//方法实现
@end

类的访问权限

有三种访问权限:@public,@private,@protected。属性默认的权限是保护类型,方法默认的权限是公有类型。

OC中的构造函数以initWith***开头,主要做一些初始化工作,析构函数为dealloc,如果自己写类没有定义,系统会自动提供一个默认的构造函数和析构函数。

举个例子说明一下,如下代码:

-(id) init{
self = [super init];
//使用super父类对象,self表示本类对象
if(self){ NSLog(@“在构造函数中name %@ age%d %s”,_name,_age,_FUNCTION_);
}
return self;
} -(id)initWithName:(NSString *)newName{ } -(id)initWithName:(NSString*)newName withAge:(int) newAge{
}
-(void)dealloc{
//析构函数在对象完全消失的时候调用
//对象销毁时调用,对象计数器=0
//dealloc不要手动调用[person dealloc],应该调用[person release];
//release销毁对象,release计数器减一,减到0就自动调用dealloc。
[super dealloc];
}

在OC中也可以使用"obj->arrt"的形式访问和设置属性字段,但前提是该字段必须被声明为公有类型。但是这种方式不建议使用。

#import<Foundation/Foundation.h>
@interface Person:NSObject{
@public
int _age;
NSString *_name;
}
-(void) setAge:(int)age;
-(int)getAge;
@end
@implementation Person
-(void) setAge (int)age{
_age = age;
} -(int)getAge{
return _age;
}
@end int main()
{
@autoreleasepool{
Person *person = [[Person alloc] init];
person->age = ;
person->name = @”小红”;
}
return ;
}

Person *person = [[Person alloc] init]就是person指向的对象分配了内存空间,并进行了初始化。也可以用Person *person = [Person new],OC中也支持new运算符。因为age、name字段被声明为public类型,所以可以使用指针调用的方式来设置对象的属性。

参数标签

-(Person *)init:(int) newID:(int) newAge;//没有使用参数标签

-(Person *)initWithID:(int) newID andAge:(int) newAge;//使用参数标签

第一个参数可以不带标签,从第二个参数开始可以带标签。现在的方法名为:initWithID:andAge:,参数标签可以提高方法名的可读性,同时还可以用于方法的重载。

方法重载

在OC中,方法的重载不像C++那样可以通过,参数类型,参数个数进行区分了。OC中不是严格的函数重载。

//方法名相同并且参数个数相同但参数类型不同,在OC中构不成方法重载
-(int) doSth:(int) x;
-(int) doSth:(float) x; -(int) doSth:(int) x:(int) y;
-(int) doSth:(float) x:(float) y; //用参数标签可以构成方法重载
-(int) doSth:(int) x:(int) y;
-(int) doSth:(float) x andY:(float) y;

ios开发之OC基础-类和对象的更多相关文章

  1. 李洪强iOS开发之OC[006] - 类和对象

  2. ios开发之OC基础-oc小程序

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  3. ios开发之OC基础-ios开发学习路线图

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  4. 李洪强iOS开发之OC语言类的深入和分类

    OC语言类的深入和分类 一.分类 (一)分类的基本知识  概念:Category  分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件 ...

  5. 李洪强iOS开发之OC[012] -类的声明实现小结

    // //  main.m //  11 - 内容总结 // //  Created by vic fan on 16/7/9. //  Copyright © 2016年 李洪强. All righ ...

  6. 李洪强iOS开发之OC[013] -类的创建的练习

    // //  main.m //  12 - 类的创建练习 // //  Created by vic fan on 16/7/9. //  Copyright © 2016年 李洪强. All ri ...

  7. iOS 开发之 GCD 基础

    header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...

  8. OC基础:类和对象 分类: ios学习 OC 2015-06-12 18:55 17人阅读 评论(0) 收藏

    OC:Objective-c     面向对象的c语言,简称obj-c或者OC OC和C的区别 1.OC是C语言的超集,OC是在C语言的基础上结合smalltalk的优点,开发出来的语言.oc兼容所有 ...

  9. 李洪强iOS开发之OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Per ...

随机推荐

  1. BIP_开发案例09_结合JavaCP通过BIP API输出报表dataprocess / rtfprocess / foprocess(案例)

    20150814 Created By BaoXinjian

  2. php 自带过滤和转义函数

    函数名 释义 介绍 htmlspecialchars 将与.单双引号.大于和小于号化成HTML格式 &转成&"转成"' 转成'<转成<>转成> ...

  3. 利用Mathematica计算伴随矩阵

    AdjointMatrix[M_] := Module[{Ma, B, n, i, j}, Ma = Minors[M];   B = Ma;   n = Dimensions[M][[1]];   ...

  4. CLR via C#笔记

    第一部分 CLR基础 CLR和JIT “运行时”如何解析类型引用 第二部分 设计类型 使用C#的is和as操作符来转型 运行时的相互联系 基元类型.引用类型和值类型 值类型的装箱和拆箱 哈希码 dyn ...

  5. 【JavaScript】日期和数字格式化

    var date, number; /** * 让日期和时间按照指定的格式显示的方法 * @param date * @param formatString format 格式字符串 * @retur ...

  6. Json--Android中数据文件解析(Json解析--从服务器端获取数据并且解析,显示在客户端上面)

    前面学习过了使用SAX解析XML数据(点击进入:SAX解析XML数据),今天学习Json解析: 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据 ...

  7. 冲突--ScrollView嵌套ListView冲突问题的最优解决方案

    项目做多了之后,会发现其实 ScrollView嵌套ListVew或者GridView等很常用,但是你也会发现各种奇怪问题产生.根据个人经验现在列出常见问题以及代码最少最简单的解决方法. 问题一 :  ...

  8. Jetty服务器jmx监控

    Jetty服务器jmx监控 Jetty 服务器增加jmx,jmx-remote模块 1.修改对应jetty服务器的配置文件start.ini追加如下两行–module=jmx–module=jmx-r ...

  9. MySQL优化技巧之三(索引操作和查询优化)

    对于任何DBMS,索引都是进行优化的最主要的因素.对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降.如果对多列进行索引(组合索引),列的顺序非常重要,MySQL仅能 ...

  10. android SFC

    本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教. 在开始Andr ...