OC基础4:类和方法
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的《Objective-C程序设计第6版》过程中的笔记。
1、类的声明(@interface)要放在以它自己名字命名的class.h文件中,而类的定义(@implementation)要放在相同名字的class.m文件中;
2、import本地文件和import系统文件的格式是不同的:导入本地文件要用双引号,导入系统文件要用< 和> ;如下:
#import <Foundation/Foundation.h>
#import “calss.h”
3、程序主要分三个部分:class.h、class.m和main.m,其中:导入系统文件在class.h部分,class.m和main.m只需导入class.h;
4、关于@property指令和@synthesize指令:
(1)、可以只用@property指令而不用@synthesize指令,如果不用@synthesize指令的话,@property指令声明的那些实例变量会被自动命名为以“_”开头,最好还是两个都用上;
(2)、@property指令在interface部分,@synthesize指令在implementation部分;
(3)、@property指令后面的数据类型不需要括号,如下:
@property int num;
(4)、@synthesize指令后不需要跟数据类型,同时有了@synthesize指令后,implementation部分不需要再使用花括号定义这些变量;
(5)、在interface部分用@property指令声明内容如下:
@property int xxx;
相当于:
@interface XClass: NSObject{
int xxx;
}
-(void) setXxx: (int) n;
-(int) xxx;
相当于声明了变量(int) xxx并且声明了两个方法setXxx和xxx。注意set方法前面有set,get方法前面没有get。(所以可以直接用xClass.xxx访问xxx,相当于调用了xxx方法。)
(6)、在implementation部分用@synthesize指令定义内容如下:
@synthesize xxx;
相当于:
@implementation XClass
-(void) setXxx: (int) n{
xxx = n;
}
-(int) xxx{
return xxx;
}
相当于把两个函数的实现方法补全,如果没有使用@synthesize指令的话,则编译器会生成以下代码:
@implementation XClass {
int _xxx;
}
-(void) setXxx: (int) n{
_xxx = n;
}
-(int) xxx{
return _xxx;
}
(7)、所谓的实例变量会被自动命名为以“_”开头,只是对于@implementation部分而言。在@interface部分和在main函数中,不论是用点运算符访问属性还是用方括号调用setter和getter方法,属性都是没有以“_”开头的。从(6)中第二部分可以看到,setter和getter方法涉及到属性的名字还是用xxx,只有在方法内要使用到具体属性了,才是_xxx。即是说,所谓的以“_”开头的属性,只有在没有定义@synthesize的情况下,在@implementation部分中定义的方法需要访问到的属性才是以“_”开头。其他地方一概视为正常命名。
(8)、使用@property指令和@synthesize指令定义属性后,如果使用点运算符访问,可以直接用xClass.xxx访问到set方法和get方法;用方括号访问的话,则必须是[xClass setXxx]和[xClass xxx];
5、关于点运算符和方括号:
(1)、点运算符一般用在属性上,即是用来设置或取得变量的值,比如:
aPerson.sex;
(2)、方括号一般用在方法上,比如:
[aPerson run];
(3)、两者可混用,从语法上来讲不算错误,但是最好不要混用;
6、关于多个参数的方法:
(1)、方法的声明如下例:
-(void) setTo: (int) n over: (int) d;
注意n是形参而over是第二个参数名了;
(2)、方法的使用如下例:
[aClass setTo: 1 over: 2];
照着方法声明时的格式去填参数值,一个一个来;
(3)、关于(1)中的方法声明,其实参数名over可以省略,变成如下形式:
-(void) setTo: (int) n : (int) d;
同样是允许的,但是会使得代码容易混淆,最好不要使用这种风格;
7、如果一个方法要以某个类的实例作为参数,那么在声明这个方法的时候记得要用上“*”,如下:
-(void) xxx: (class *) c;
8、实例变量和局部变量:
(1)、实例变量指在接口部分声明的(或从父类继承来的)变量,实例方法可以直接访问它们的实例变量;
(2)、作用域限于定义它的程序块之间的变量称为局部变量,比如方法的形参。
9、关于static关键字:
(1)、使用static声明过的变量是为静态变量,它的默认值是0;
(2)、静态变量的值还是可以改变的,static的作用只是让这个变量的值一直保存着;
(3)、如下,有代码段如下:
-(int) showPage{
…
static int pageCount = 0;
++PageCount;
return PageCount;
…
}
如果这个函数没有static的话,那么每次调用得到的返回值都是1,每次重新调用这个方法,变量的值就会重新分配;使用static之后,第一次调用的返回值是1,第二次是2,以此类推,变量的值会一直存在并累加;
(4)、(3)的代码段是用来计算页数的,把pageCount设为实例变量和设为局部静态变量的意义是不同的:
设为实例变量则计算的是某个实例的页数,如果有a和b两个实例,那么a和b的pageCount的值不一定相同;
设为局部静态变量的话,则pageCount的值等于a和b的页数之和,因为a和b对这个方法的调用都会被pageCount累加起来;
10、self关键字:相当于this关键字,可以直接调用当前对象;
OC基础4:类和方法的更多相关文章
- java基础知识—类的方法
1.定义类方法的语法: 访问修饰符 返回值类型 方法名(){ 方法体: } 2.方法名的规范: 1.必须以字母下划线·“—”或“$”开头 2.可以有数字,但不能以数字开头. 3.如果方法名是以多个单词 ...
- Java入门基础(类的方法)
方法 1.添加方法 方法表示一个类能做什么.在Java里,方法和属性属于对等的术语,在一个类中,不仅可以添加属性,还可以添加方法. 类 { 属性:描述“我有什么” 方法:描述“我能做什么” } 例子: ...
- OC基础--常用类的初步介绍与简单使用之NSDate
一.创建一个时间 NSDate *date = [NSDate date]; // 打印出的时间是0时区的时间(北京--东八区) NSLog(@"%@",date); 二.日期格式 ...
- OC基础--常用类的初步介绍与简单实用之集合类
集合类的异同点 一.NSArray\NSMutableArray *有序 *快速创建(只有不可变数组可以):@[obj1, obj2, obj3]; *快速访问元素:数组名[i] *只能存放对象 二. ...
- OC基础--常用类的初步介绍与简单实用之NSString
一.NSString:不可变字符串/NSMutableString:可变字符串 1>字符串的常用创建方式: (1)NSString *s1 = @"Chaos"; (2)NS ...
- OC基础笔记目录
OC基础(1) Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 OC基础(2) 类与对象 类的设计 第一个OC类 对象方法的声明和实现 类方法的声明和实现 OC基础(3) 对象 ...
- OC基础--OC中类的声明与定义
OC中设计一个类的步骤: 一.声明类: 1.用到的关键字--@interface 和 @end 2.类名 3.继承NSObject 4.属性 5.方法(行为,只需要声明) 二.实现(定义)类 1.用到 ...
- 基于Java+Selenium的WebUI自动化测试框架(九)-----基础页面类(BasePage)
上篇我们写了java读取xml文件的类,实现了可以从xml文件读取元素的方式.那么,接下来我们需要考虑一个问题.我们拿了这些元素之后怎么去操作呢? 先来看看我们手工测试的时候是怎么进行的. 双击浏览器 ...
- ios开发之OC基础-类和对象
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
随机推荐
- UGUI Image控件
今天一起学习Image控件O(∩_∩)O~ 介绍一下基本的属性 Source:Image: 指定图片源, 图片设置2DSprite(2D and UI)格式Color: ...
- iOS 无效的版本,提交成功,不出现版本号
最近更新到 iOS 10,提交审核 会卡在 转菊花 ...需要更新到Xcode 8 去提交. 然后提交成功后,版本管理 新版本,构建版本 迟迟不出来.恭喜你,你的版本是无效的.请看看 你的 公司app ...
- 数据库的优化tips
数据库 TIPS:: 1.用于记录或者是数据分析的表创建时::使用Id作为主键,1,2,3...表示消息条数.用户账号id用于做外键.一个用户相应唯一个accountId ...
- linux 在批处理中,完整路径有空格的处理方式(加引號)
cp -f E:/XML_EDITOR/xmleditor25/xmleditor/Editor_UIOuterCtrl/TraceViewDlg.cpp E:/XML_EDITOR/'XMLEdit ...
- vs在线工具杂烩
http://visualstudiogallery.msdn.microsoft.com/site/search?f%5B0%5D.Type=RootCategory&f%5B0%5D.Va ...
- Android应用程序与SurfaceFlinger服务之间的共享UI元数据(SharedClient)的创建过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/7867340 在前面一篇文章中,我们分析了And ...
- Quartz2D介绍
一.什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图 ...
- .NET c# 串口通信
这段时间做了一个和硬件设备通信的小项目,涉及到扫描头.输送线.称重机.贴标机等硬件.和各设备之间通信使用的是串口或网络(Socket)的方式.扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通 ...
- 云支付整合Tp3.2.3代码整理
可能比较少的项目用会用到云支付,我之前有个项目就用这个支付,相对于微信支付和支付宝支付他名气太小了,但是很多支付宝或者微信审核不下来就回选择这种支付方式,总体开发比较简单.云支付官网是这么说的“云支付 ...
- C++程序设计实践指导1.2二维数组的操作运算改写要求实现
改写要求1:改写为以单链表表示二维数组 #include <cstdlib> #include <iostream> using namespace std; struct L ...