本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的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_);

}returnself;

}-(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

@interfacePerson:NSObject{@public

int_age;

NSString*_name;

}-(void) setAge:(int)age;-(int)getAge;@end

@implementationPerson-(void) setAge (int)age{

_age=age;

}-(int)getAge{return_age;

}@end

intmain()

{

@autoreleasepool{

Person*person =[[Person alloc] init];

person->age = 20;

person->name =@”小红”;

}return 0;

}

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 c语言调用oc方法,ios开发之OC基础-类和对象(示例代码)相关推荐

  1. ios开发之OC基础-类和对象

    ios开发之OC基础-类和对象 本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录 ...

  2. IOS开发之UI基础LOL英雄展示-15

    IOS开发之UI基础LOL英雄展示-15 // // ViewController.m // 15-英雄展示-单组数据 // // Created by 鲁军 on 2021/2/3. //#impo ...

  3. Android NDK开发之 NEON基础介绍

    原文:http://blog.csdn.net/app_12062011/article/details/50434259 Android NDK开发之 NEON基础介绍 这是官方介绍: http:/ ...

  4. C#进行MapX二次开发之MapX基础知识

    C#进行MapX二次开发之MapX基础知识 MapX的主要技术特点 (1). 以表(Table)的形式组织信息 每一个表都是一组MapInfo文件,这些文件组成了地图文件和数据库文件.为使用MapIn ...

  5. 050.前端开发之HTML基础及常用标签

    050.前端开发之HTML基础及常用标签 文章目录 一.前端开发介绍 (一)前端开发都有哪些内容 1.HTML是什么? 2.CSS 3.JavaScript 4.HTML.CSS和JavaScript ...

  6. ios 更新尺寸调用什么方法_iOS开发经验总结(上)

    来源:蝴蝶之梦天使 链接:http://www.jianshu.com/p/d333cf6ae4b0 在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPho ...

  7. iOS开发之OC入门(类的基础知识)

    内存中的五大区域 栈:存储局部变量,局部变量作用域执行完会被立即回收 堆:程序员手动申请的字节空间 malloc calloc realloc BSS段:存储未被初始化的全局变量和静态变量,初始化后回 ...

  8. iOS开发之OC入门(类的使用)

    占位符 %p打印指针的值 %@打印指针对应的值,输出的格式:<对象所属的类名:对象的地址> NSLog%@方法调用传入对象的description的方法,拿到该方法的返回值,这个返回值是一 ...

  9. JNI基础 c语言调用java方法

    利用c语言调用java无参的方法 java方法 com.example.jniparsedata.ParseData类中的方法     //打印     public void sayHelloFro ...

最新文章

  1. 基于EasyNVR摄像机网页无插件直播服务二次开发实现H5播放页面的简单集成方案...
  2. Android布局管理器-从实例入手学习相对布局管理器的使用
  3. MSTP多业务传输平台对设备接口的要求有哪些?
  4. Educational Codeforces Round 104 (Rated for Div. 2)A~E解题报告
  5. mysql binlog过期策略_对存在过期 binlog 的 MySQL5.7 添加从服务器
  6. tomcat-maven插件热部署(简洁版)
  7. OpenStack推出最新版本Newton,显著提升单一云平台 对虚拟化、裸机和容器的管理...
  8. 三阶魔方中心块调整配方和记忆方法
  9. ibatis Dynamic总结(ibatis使用安全的拼接语句,动态查询)
  10. SQL server 增删改查语句
  11. 微信小程序实现转义换行符
  12. git merge和git merge --no-ff有什么区别?
  13. jvm 的内存分配方式
  14. 【原创】纯CSS 仿U9论坛 箭形导航栏 兼容IE6+IE7+FF
  15. 海康威视云台相机4200客户端调试记录
  16. 【VHDL】四位全减器
  17. Mysql出现Table 'performance_schema.session_status' doesn't exist
  18. 天下3 最多的服务器,《天下3》服务器合并规则
  19. 下载不了代码仓库的代码怎么办?
  20. 关于贯彻《财政部 税务总局关于调整增值税税率的通知》的通知 〔2018〕405

热门文章

  1. 1970年至今(2007/7/20)原油价格走势图
  2. Autel MaxiSYS PRO MS908P Diagnostic System with Wireless VCI J-2534
  3. 已解决bs4.FeatureNotFound: Couldn‘t find a tree builder with the features you requested: html5Lib. Do y
  4. 小白python教程_面向小白的Python教程:入门篇(三)
  5. 使用js动态添加文本框 并在后台取文本框数据
  6. 浅谈“LDR6023”之最火的Type-C PD协议芯片应用理解第一部
  7. 小引写帖子,我也写帖子
  8. docker desktop如何清理redis缓存(mac)
  9. STM32F1中断嵌套及内部中断详解——新浪博客迁移
  10. 混沌密码能对抗量子计算机吗,使命召唤17混沌行动密码是多少 混沌行动解密流程...