主要内容:实例变量可见度、方法

一、实例变量可见度

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第二课的更多相关文章

  1. CI(CodeIgniter)框架入门教程——第二课 初始MVC

    本文转载自:http://www.softeng.cn/?p=53 今天的主要内容是,使用CodeIgniter框架完整的MVC内容来做一个简单的计算器,通过这个计算器,让大家能够体会到我在第一节课中 ...

  2. OpenCV 第二课 认识图像的存储结构

    OpenCV 第二课 认识图像的存储结构 Mat Mat 类包含两部分,矩阵头和矩阵体.矩阵头包含矩阵的大小,存储方式和矩阵体存储空间的指针.因此,Mat中矩阵头的大小是固定的,矩阵体大小是不定的. ...

  3. Kali Linux Web 渗透测试视频教程— 第二课 google hack 实战

    Kali Linux Web 渗透测试— 第二课 代理简介 文/玄魂 课程地址: http://edu.51cto.com/course/course_id-1887.html 目录 shellKal ...

  4. 【第二课】深入理解Handler

    简要讲解Handler是做什么的 我们知道,在Android中,app启动会启动一个进程一个线程——UI线程,UI线程是主线程,并且不允许这个线程阻塞超过5秒,一旦超过5秒就会ANR. 所以较为耗时的 ...

  5. ruby代码重构第二课

    (文章都是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com) 在第一课里提取出了相通的代码,第二课里就把常量提取出来吧 一般把常量的定义写的对应的app/mo ...

  6. NeHe OpenGL教程 第二课:多边形

    前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢 ...

  7. Spark 3000门徒第二课scala面向对象总结

    昨晚听了王家林老师3000门徒spark系列课程的第二课,讲述了scala面向对象知识,并且带着过了一遍Spark核心类:SparkContent,RDD的代码,下面写一下心得: RDD是抽象类,实现 ...

  8. grails2.3.11第二课

    第二课主要介绍grails相关插件的使用,这是敏捷开发所必需的途径. 可以把grails的插件看作是grails正常项目的迷你型,因为看插件的源码,它的目录结构和正常项目相差无几. 官方开源插件地址 ...

  9. 过拟合/欠拟合&logistic回归等总结(Ng第二课)

    昨天学习完了Ng的第二课,总结如下: 过拟合:欠拟合: 参数学习算法:非参数学习算法 局部加权回归 KD tree 最小二乘 中心极限定律 感知器算法 sigmod函数 梯度下降/梯度上升 二元分类 ...

随机推荐

  1. WPF原生环形图表

    原文:WPF原生环形图表 版权声明:欢迎转载.转载请注明出处,谢谢 https://blog.csdn.net/wzcool273509239/article/details/56480963 主要利 ...

  2. Unity的Json解析<二>–写Json文件

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50378805 作者:car ...

  3. springboot的几个缓存相关注解

    @Cacheable:查询 几个属性: ​ cacheNames/value:指定缓存组件的名字: ​ key:缓存数据使用的key,可以用来指定.默认即使用方法参数的值 ​ keyGenerator ...

  4. nutch的一些基础整理

    nutch的一些基础整理 原创 2015年03月22日 18:18:01 标签: nutch / 240 编辑 删除 一.关于配置文件: nutch-default.xml:爬虫的默认配置.在${nu ...

  5. Java并发编程(七)ConcurrentLinkedQueue的实现原理和源码分析

    相关文章 Java并发编程(一)线程定义.状态和属性 Java并发编程(二)同步 Java并发编程(三)volatile域 Java并发编程(四)Java内存模型 Java并发编程(五)Concurr ...

  6. [JZOJ 100026] [NOIP2017提高A组模拟7.7] 图 解题报告 (倍增)

    题目链接: http://172.16.0.132/senior/#main/show/100026 题目: 有一个$n$个点$n$条边的有向图,每条边为$<i,f(i),w(i)>$,意 ...

  7. 关闭WPS屏保

    WPS作为国产的Office,可谓是越来越流氓,无缘无故给你弄个屏保,不好好做Office就知道如何圈钱,或许这就是国内IT行业和国外的差距吧. 我用的WPS内部版本是:10.1.0.7311 如何查 ...

  8. SpringBoot学习笔记(11)-----SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用

    1. activemq 首先引入依赖 pom.xml文件 <dependency> <groupId>org.springframework.boot</groupId& ...

  9. 我的Java历程_Java对象类型的转换

    向上转型: 可以将子类对象看作是父类对象叫做“向上转型”,由于向上转型是从一个较为具体的类向较为抽象的类的转换,所以它总是安全的. 例如:可以将正方形.长方形叫做是四边形,但是不能说四边形是正方形或长 ...

  10. 【AnjularJS系列2 】— 表单控件功能相关指令

    第二篇,表单控件功能相关指令. ng-checked控制radio和checkbox的选中状态 ng-selected控制下拉框的选中状态 ng-disabled控制失效状态 ng-multiple控 ...