1.3 封装

一.匿名对象

匿名就是没有名字, 匿名对象就是没有名字的对象

1.有名字的对象,只要用一个指针保存了某个对象的地址, 我们就可以称这个指针为某个对象称p为Person对象

  1. Person *p =[Person new]; // 0ffc12
  2. p->_age = 30;
  3. p->_name= @"lnj";
  4. [p say];
  5. 0ffc12->_age = 30;
  6. 0ffc12->_name= @"lnj";
  7. [0ffc12 say];

2.没有名字的对象,无论有没有名字,只要调用new方法都会返回对象的地址,每次new都会新开辟一块存储空间

  1. [Person new]->_age = 30;
  2. [Person new]->_name = @"LMJ";
  3. [[Person new] say];

3.匿名对象的应用场景

3.1当对象只需要使用一次的时候就可以使用匿名对象

  1. Iphone *phone = [Iphone new]; // 0ffb11   phone = 0ffb11
  2. [phone brand]; // [0ffb11 brand];
  3. [[Iphone new] brand]; // [0fff5 brand];

3.2匿名对象可以作为方法的参数(实参)

  1. Person *p1 = [Person new];
  2. //    Iphone *phone1 = [Iphone new];
  3. //    [p1 signal:phone1];
  4. [p1 signal:[Iphone new]];

二、修改项目模板

  • 修改项目模板以及main函数中的内容
    /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Mac/Application/Command Line Tool.xctemplate/
  • 修改OC文件头部的描述信息
    /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/Source/Cocoa Class.xctemplate
  • 1> Xcode文档安装的位置1:
    /Applications/Xcode.app/Contents/Developer/Documentation/DocSets

注意: 拷贝之前最好将默认的文档删除, 因为如果同时存在高版本和低版本的文档, 那么低版本的不会显示

  • 2> Xcode文档安装的位置2:
    /Users/你的用户名/Library/Developer/Shared/Documentation/DocSets
    如果没有该文件夹可以自己创建一个
  • 代码块导入

    将下载好的代码片段拷贝到:/Users/LNJ/Library/Developer/Xcode/UserData/CodeSnippets下

    注意将LNJ换为自己的用户名

三、setter和getter方法

封装: 屏蔽内部实现的细节, 仅仅对外提供共有的方法/接口

好处: 保证数据的安全性

将变化隔离

规范: 一般情况下不会对外直接暴露成员变量, 都会提供一些共有的方法进行赋值

成员变量都需要封装起来

  • setter和getter方法
  1. // setter
  2. - (void)setAge:(int)age;
  3. // getter
  4. - (int)age;
  • setter和getter方法的调用
  1. // setter方法
  2. p.age = 10; // 编译器自动转换为:[p setAge:10];
  3. // getter方法
  4. p.age; // 编译器自动转换为:[p age];

四、自定义代码块

五、self关键字

  • self:谁调用,self返回谁(self在类方法中代表类对象,在对象方法中代表对象方法)
  • 注意点:在类方法和对象方法不可以用self调用self所在方法,否则是导致死循环

如果self在对象方法中, 那么self就代表调用当前对象方法的那个对象

如果self在类方法中, 那么self就代表调用当前类方法的那个类

总结:

我们只用关注self在哪一个方法中 , 如果在类方法那么就代表当前类, 如果在对象方法那么就代表"当前调用该方法的对象"

注意:

>self会自动区分类方法和对象方法, 如果在类方法中使用self调用对象方法, 那么会直接报错

>不能在对象方法或者类方法中利用self调用当前self所在的方法

使用场景:

可以用于在对象方法之间进行相互调用

可以用于在类方法之间进行相互调用

可以用于区分成员变量和局部变量同名的情况

六、如何阅读文档

  • Start Developing iOS Apps Today
    马上着手开发 iOS 应用程序, 建立基本iOS开发概览
  • iOS Technology Overview

    iOS技术概览,阅读这个文档的目的和检测标准是,遇到具体问题,知道应该去看哪方面的文档

  • iOS Human Interface Guidelines
    iOS 人机交互指南,阅读这个文档的目的和检测标准是,看到任何一个App,你可以知道它的任何一个UI是系统控件,还是自定义控件,它的层次关系等等。
  • Programming with Objective-C
    学习OC基础语法,阅读这个文档的目的和检测标准是,看得懂基本的Objective-C代码,方便后面的学习和阅读各种示例代码
  • App Programming Guide for iOS
    iOS应用程序编程指南,介绍的就是开发一个App的完整流程,包括App的生命周期、休眠、激活等等. 阅读这个文档的目的和检测标准是,了解全部流程和很多细节问题
  • View Programming Guide for iOS
  • View Controller Programming Guide for iOS
    阅读这两个文档的目的和检测标准是,深刻理解什么是View,什么是View Controller,理解什么情况用View,什么情况用View Controller。
  • Table View Programming Guide for iOS
    阅读这个文档的目的和检测标准是,深刻理解UITableView/UITableViewController的理论和使用方法

来自为知笔记(Wiz)

时间: 2024-10-02 07:39:17

1.3 封装的相关文章

python学习 面向对象封装

from collectoins import namedtuplePoint=namedtuple('point',['x','y'])t1=Point(1,2)print(t1.x)print(t1.y)没有方法的类属性不会发生变化    定义简单 不能改变面向对象封装私有属性!!!私有方法!!!用装饰器描述的几个方法@property !!!@classmethod!!@staticmethod! 封装:class Teacher:     def __init__(self,name,p

python—面向对象的封装

封装 私有属性 class Teacher: __identifier = 'Teacher' #私有静态属性 def __init__(self,name,pwd) self.name = name self.__pwd = pwd #私有属性 内部使用,外部不能使用 def pwd(self): print(self.__pwd) alex = Teacher('alex','3714') alex.pwd() class Teacher: __identifier = 'Teacher'

dbutils封装对象,单列,一行一列(用)

基本用法:查找并封装对象与对象集合 public User findUserByNamePassword(String name,String password){ QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "select * from user where name='"+name+"' and password = '"+password

python基础--接口与归一化设计、封装、异常、网络编程

1 接口与归一化设计 1.1 归一化概念: 归一化的好处: 1.归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大降低了使用者的使用难度. 2.归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合 继承的两种用途 一:继承基类的方法,并且做出自己改变或者扩展(代码重用):实践中,继承的这种用途意义并不很大,甚至常常是有害的.因为它使得子类与基类出现强耦合. 二:声明某个子类兼容于某基类,定义一个接口类(模仿java的Interface),接口类中

自动化测试框架 selenium api的封装

接上一篇 http://tianxietaotao.blog.51cto.com/12002420/1951701 这篇我大概介绍下我这个工具的简单介绍 先上图: 制作背景: Web自动化测试在现在测试领域已经越来越普遍,但是写代码对于好多测试猿代码基础较弱,搭建系统也比较麻烦.所以我抽闲暇时间做了这个简单的工具:下面简单介绍下功能 工具简单介绍: 1.工具栏:Resume:调试阶段执行到下一个断点 next:单步执行 debug/run 模式切换 执行.停止 2.用例树:用例采用execl或者

lambda表达式封装对数据库的查询

前言: 1.为什么要封装lambda表达式数据库查询,原因有一下几点: 1.1.在以往的开发中进行数据库表查询时,其实所需要的字段就是其中几个,但是在开发中,开发者往往习惯select * 进行查询,当数据多和用户量多时,查询的效率会降低. 1.2.在写查询where条件的时候,总是用string.format去拼接字符串,开发效率低. 1.3.代码不够优雅,代码中嵌套和多sql语句,如果是表字段发生改变时编译器检查不出来,代码出错的概率大. 1.4.本着 write less  do more

Android封装TitleBar基本适用所有常规开发

Android封装TitleBar基本适用所有常规开发 github地址:https://github.com/SiberiaDante/SiberiaDanteLib/blob/master/sample/src/main/notes/TitleBar.md 主要实现:(后续会继续完善,喜欢的给个star,感谢支持) 使用方法 allprojects { repositories { ... aven { url 'https://jitpack.io' } } } dependencies

将数据库从服务器移到浏览器--indexedDB基本操作封装

数据库是属于服务器的,这是天经地义的事,但是有时候数据也许并非需要存储在服务器,但是这些数据也是一条一条的记录,怎么办?今天来带领你领略一下H5的一个新特性--indexedDB的风骚.你会情不自禁的发出感叹--不可思议! 一.链接数据库 indexedDB没有创建数据库的概念,你可以直接链接数据库,如果你链接的数据库并不存在,那么会自动的创建一个数据库.看下面的这个例子. <!DOCTYPE html> <html lang="en"> <head>

Java基础——封装

最近学习Java面向对象方面的知识点,一直没时间更新博客,因为这块的知识点真的蛮绕的.一个知识点一个知识点的往外冒,而且对于我这个初学者来说区分构造器和方法就花费了一整天的时间.现在准备再重新过一遍知识点. 先背下来一个理念: 面向对象程序设计是将数据放在第一位的,然后再考虑操作数据的方法. 之前,再学习Java的优越性的时候,我们知道了Java是一种面向对象设计的程序设计语言.那到底什么是面向对象程序设计呢?要弄懂它,首先我们简单了解一下另一种程序设计. 一.面向过程程序设计: 面向过程程序设

转 常见视频编码方式以及封装格式

常见视频编码方式以及封装格式 常见视频编码方式 所谓视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式.视频流传输中最为重要的编解码标准有国际电联的H.261.H.263.H.264.H.265,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准,此外在互联网上被广泛应用的还有Real-Networks的RealVideo.微软公司的WMV以及Apple公司的QuickTime等. AVI AVI 是 Audio Video I