OC第二课
主要内容:实例变量可见度、方法
一、实例变量可见度
public(共同拥有的):实例变量能够在类的内部和外部使用
protected(受保护的、默认的):实例变量仅仅能在该类及其子类中使用
private(私有的):实例对象仅仅能在该类中使用
所谓的内部是指:@interface .... @end之间
演示样例:
@interface
@public / /共同拥有的。谁都能訪问
NSString *_adress ; / /地址
NSString *_hobby ; / /爱好
@protected / /受保护的、默认的,仅仅能在该类及其子类中使用
NSString *_name ; / /姓名
NSString *_age ; / /年龄
@private / /私有的仅仅能在该类内部使用
NSString *_gender ; / /性别
@end
普通情况下,使用默认的受保护的 @protected
为什么呢?由于使用@publickeyword暴漏了类内部的组件,违背了面向对象的 “ 封装 ” 特性
以下是使用@public、@protected、@private的差别
怎样在其它文件里使用protected修饰的实例变量呢?
二、方法
OC中有两种方法:
类方法:仅仅能类使用,比如 +(id)alloc
注意:类方法中不能使用实例变量
实例方法:仅仅能对象使用,比如:-(void)sayHi
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGh1aTkz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="600" height="400" alt="">
方法名就是:去掉方法类型、返回值类型、參数类型、參数名和空格,剩下的就是方法名
比如:replaceObjectAtindex :withObject:这就是一个方法名
注意:1、类中不能出现同样的方法名
2、" : "标示參数,不能省略。有 " : "必须有參数
赋值、取值方法
演示样例:
- (void)setName:(NSString *)name;
- (NSString *)getName;
- (void)setName:(NSString *)name
{
_name = name;
}
- (NSString *)getName
{
return _name;
}
只是我们一般写成这样的方式(多參方式:简单介绍、省事)
演示样例:
- (void)setName:(NSString *)name
setAge:(int)age
setHeight:(float)height ;
- (NSString *)getName
{
return _name;
}
- (int)getAge
{
return _age;
}
- (float)getHeight
{
return _height;
}
注意:1、OC里面。为实例变量赋值的方法称为setter(设置器)
2、读取实例变量值的方法称作getter(訪问器)
3、setter方法能够把參数写在一起(多參),可是获取方法getter必须分开写。一个參数一个getter方法
4、不管是setter还是getter内部操作的是实例变量,每个实例变量都须要一对setter和getter方法
方法的使用:
在OC里面没有 “ student调用sayHi ” 这样的表述
正确表述:给student对象发送sayHi消息,格式: [ student sayHi ]
三、自己定义初始化方法
- (id)init这个初始化方法仅仅能给实例变量设置默认值,不灵活
- (instancetype)initWithName:自己定义初始化方法。依据需求定义初始化的方法
演示样例:
- (instancetype)initWithName:(NSString *)name
initWithAge:(int)age
initWithHeight:(float)height ;
- (instancetype)initWithName:(NSString *)name
initWithAge:(int)age
initWithHeight:(float)height
{
_name = name;
_age = age;
_height = height;
return self;
}
#import:导入头文件。即导入头文件里的内容到当前类
#import " " :导入自己定义的类
#import <>:导入系统类库中的头文件
功能类似C语言的#include,可是能够避免头文件的反复导入
四、嵌套循环导入
创建两个类,A继承于NSObject。B继承于NSObject
A类有个实例变量 B *b。
B类有个实例变量 A *a;
这时就须要用到@classkeyword
@class:告诉编译器@class后面的字符串作为类名使用。并未导入类的接口内容,有效避免了嵌套循环导入
OC第二课的更多相关文章
- CI(CodeIgniter)框架入门教程——第二课 初始MVC
本文转载自:http://www.softeng.cn/?p=53 今天的主要内容是,使用CodeIgniter框架完整的MVC内容来做一个简单的计算器,通过这个计算器,让大家能够体会到我在第一节课中 ...
- OpenCV 第二课 认识图像的存储结构
OpenCV 第二课 认识图像的存储结构 Mat Mat 类包含两部分,矩阵头和矩阵体.矩阵头包含矩阵的大小,存储方式和矩阵体存储空间的指针.因此,Mat中矩阵头的大小是固定的,矩阵体大小是不定的. ...
- Kali Linux Web 渗透测试视频教程— 第二课 google hack 实战
Kali Linux Web 渗透测试— 第二课 代理简介 文/玄魂 课程地址: http://edu.51cto.com/course/course_id-1887.html 目录 shellKal ...
- 【第二课】深入理解Handler
简要讲解Handler是做什么的 我们知道,在Android中,app启动会启动一个进程一个线程——UI线程,UI线程是主线程,并且不允许这个线程阻塞超过5秒,一旦超过5秒就会ANR. 所以较为耗时的 ...
- ruby代码重构第二课
(文章都是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com) 在第一课里提取出了相通的代码,第二课里就把常量提取出来吧 一般把常量的定义写的对应的app/mo ...
- NeHe OpenGL教程 第二课:多边形
前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢 ...
- Spark 3000门徒第二课scala面向对象总结
昨晚听了王家林老师3000门徒spark系列课程的第二课,讲述了scala面向对象知识,并且带着过了一遍Spark核心类:SparkContent,RDD的代码,下面写一下心得: RDD是抽象类,实现 ...
- grails2.3.11第二课
第二课主要介绍grails相关插件的使用,这是敏捷开发所必需的途径. 可以把grails的插件看作是grails正常项目的迷你型,因为看插件的源码,它的目录结构和正常项目相差无几. 官方开源插件地址 ...
- 过拟合/欠拟合&logistic回归等总结(Ng第二课)
昨天学习完了Ng的第二课,总结如下: 过拟合:欠拟合: 参数学习算法:非参数学习算法 局部加权回归 KD tree 最小二乘 中心极限定律 感知器算法 sigmod函数 梯度下降/梯度上升 二元分类 ...
随机推荐
- 调整mysql数据库最大连接数
1.查看mariadb数据库最大连接数,默认为151 MariaDB [(none)]> show variables like 'max_connections'; +------------ ...
- linux内核(四)内存管理单元MMU
1,基本概念 一个程序运行时没必要全部都同时装入内存,只需要把当前需要运行的部分装入内存即可,这样就使得一个大程序可以在较小的内存中运行,也使得内存中可以同时装入更多的程序并发执行,从用户角度看,该系 ...
- 搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群
笔记内容:搭建ELK日志分析平台(上)-- ELK介绍及搭建 Elasticsearch 分布式集群笔记日期:2018-03-02 27.1 ELK介绍 27.2 ELK安装准备工作 27.3 安装e ...
- cocos2d-x:读取指定文件夹下的文件名称+解决中文乱码(win32下有效)
援引:http://blog.csdn.net/zhanghefu/article/details/21284323 http://blog.csdn.net/cxf7394373/article/d ...
- 3.多线程传参,以及tuple数组
#include <Windows.h> #include <thread> #include <iostream> #include <tuple> ...
- POJ 3469 Dinic (二元关系)
题意: 思路: //By SiriusRen #include <queue> #include <cstdio> #include <cstring> using ...
- C#之Action和Func的用法(转自 https://www.cnblogs.com/LipeiNet/p/4694225.html)
以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发 ...
- png库结合zlib库使用出现的一个链接问题的解决
作者:朱金灿 来源:http://blog.csdn.net/clever101 要使用png库,首先得编译png库,要编译png库,得依赖zlib库的头文件.在使用png库读取一个png文件时,代码 ...
- Mysql表引擎的切换
转换MYSQL表的引擎 1.方法一:Alter table 将1个表的引擎修改为另一个引擎最简单的方法是使用Alter table语句. 下面的语句将myTable的引擎修改为InnoDB mysql ...
- ActiveMQ学习笔记(10)----ActiveMQ容错的连接
1. Failover Protocol 前面讲述的都是Client配置连接到指定的broker上,但是,如果Broker的连接失败怎么办呢?此时,Client有两个选项:要么立刻死掉,要么连接到其他 ...