类和对象的方法与属性---懒加载与私有事件---单例与私有化构造函数

对象属性:

1、private修饰的属性:只能在本类内部访问,分类和外部都不能访问(彻底私有)

2、fileprivate修饰的属性:在本类和分类中可以访问,外部不能访问(部分私有)

3、直接用let或var修饰的属性:在本类、分类和外部都可以访问(开放)

4、在分类中只能声明计算属性,不能声明存储属性

1     // 属性:可以被外界访问
2     var name:String?
3
4     // private修饰的属性:只能在本类内部访问,分类和外部都不能访问
5     private var age:String?
6
7     // fileprivate修饰的属性:在本类和分类中可以访问,外部不能访问
8     fileprivate var gender:String?
 1 import UIKit
 2
 3 class Person: NSObject {
 4
 5 }
 6
 7 extension Person{
 8
 9     // 分类中只能声明计算属性,不能声明存储属性
10     var desc:String{
11         return "我是小明"
12     }
13 }

类属性:

1、在本类中使用class修饰的属性,调用时《类名.属性名》

2、在分类中使用static修饰的属性(注意:分类中只能定义计算属性,不能定义存储属性),调用时《类名.属性名》

1     // class修饰本类属性:通过《类名.属性名》进行访问
2     class var classAttribute:String{
3         return "I‘m the classAttribute."
4     }
5
6     // static修饰分类中计算属性:通过《类名.属性名》进行访问
7     static var staticAttribute:String{
8         return "I‘m the staticAttribute."
9     }

对象方法:

1、直接用func修饰,本类、分类、外界都可以调用(开放)

2、用private修饰,只有在本类中可以调用(彻底私有)

3、用fileprivate修饰,在本类、分类中可以访问,外部不能访问(部分私有)

 1     // 直接用func的方法,本类、分类、外界都可以调用
 2     func sayHi() -> Void {
 3
 4     }
 5     // 只有在本类中可以调用
 6     private func sayHi3(){
 7
 8     }
 9     // 只有在本类、分类中调用
10     fileprivate func sayHi2() -> (){
11
12     }

类方法:

1、在本类中使用class修饰类方法

2、在分类中使用static修饰类方法

 1 class Person: NSObject {
 2
 3     // 在本类中,类方法用class修饰
 4     class func sayHi() -> (){
 5         print("Hello world,I‘m the class method.")
 6     }
 7 }
 8
 9 // extension 相当于OC 中的分类
10 extension Person{
11
12     // 在分类中,类方法用static修饰
13     static func sayHello() -> Void{
14         print("Hello world,I‘m the static method.")
15     }
16 }

懒加载与私有事件:

懒加载的关键字用lazy修饰,有三种创建方法

private修饰的事件,要想添加给按钮,前面必须用@objc修饰

 1 import UIKit
 2
 3 class Person: NSObject {
 4
 5     // 懒加载方式一:直接创建
 6     private lazy var msgLabel = UILabel()
 7
 8     // 懒加载方式二:使用对象方法创建,方法名前要加self
 9     private lazy var content:String = self.createContent()
10
11     // 懒加载方式三:使用闭包创建
12     // swift懒加载用lazy修饰,代码只执行一次,哪怕对象nil了,也不会再次执行
13     // OC中的懒加载是重写get方法,当对象为nil时,会重新加载
14     // swift中懒加载使用闭包方式时,闭包可以省略 () in ,直接返回对象即可
15     private lazy var button:UIButton = {
16         let button = UIButton()
17
18         // swift中使用#selector给按钮添加事件,注意带参数写法(btn:)
19         // OC中使用@selector给按钮添加事件
20         button.addTarget(self, action: #selector(buttonAction(btn:)), for: .touchUpInside)
21
22         return button
23     }()
24
25
26     // private修饰的事件函数,在Swift运行循环里面找不到
27     // 解决方法:使用oc,基于运行时使用kvc动态派发调用该事件,@objc告诉编译器使用oc的机制去调用这个事件
28     @objc private func buttonAction(btn:UIButton){
29
30     }
31
32     func createContent() -> String{
33         return "创建的内容"
34     }
35 }

单例:用static修饰

私有化构造函数,外部不可以通过《类名()》创建对象,只能访问单例,更严谨

 1 import UIKit
 2
 3 class Person: NSObject {
 4
 5     // 单例对象,用static修饰
 6     static let currentPerson:Person = Person()
 7
 8     // 使用闭包方式创建单例对象
 9     static let sharedPerson:Person = {
10         let per = Person()
11         return per
12     }()
13
14     // 私有化构造函数,外界不可以通过《Person()》创建对象,只能访问单例对象
15     private override init() {
16         super.init()
17     }
18 }

时间: 2024-08-12 04:25:41

类和对象的方法与属性---懒加载与私有事件---单例与私有化构造函数的相关文章

类、对象、方法、属性和实例变量

放置方法的程序单元是类,类中提供一个或多个方法,为类执行任务. 方法执行一个任务,并可返回一个结果. 类的实例称为对象. 给对象发送消息称为一个方法调用,告诉对象要执行一个任务. 对象有属性,可以在程序中使用,这些属性在对象的类中用字段指定属性. public class Count//每个类声明包含关键字class加类名,public是访问修饰符 { //类通常有一个或多个方法,操纵属于该类的特定对象的属性,属性在类中声明表示为变量,这种变量在类中声明,放在方法体之外. //属性声明可以有ge

C# 类、对象、方法和属性详解

一.相关概念: 1.对象:现实世界中的实体(世间万物皆对象) 2.类:具有相似属性和方法的对象的集合 3.面向对象程序设计的特点:封装 继承 多态 4.对象的三要素:属性(对象是什么).方法(对象能做什么).事件(对象如何响应) ☆相互关系:类是对象的抽象,对象是类的实例,类是一种抽象的分类,对象则是具体事物. 比如如果车是一个类,某个人的一辆奔驰车就是一个对象,车的颜色质量就是它的属性,启动.停止这些动作则可以定义为车的方法. 二.类的定义与语法 1.定义类: [修饰符] class 类名 {

Android - Fragment正确使用方法介绍,setUserVisibleHint方法实现数据懒加载

我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源.这样的结果,我们当然不会满意.那么,能不能做到当切换到这个fragment的时候,它才去初始化呢? 答案就在Fragment里的setUserVisibleHint这个方法里. import android.support.v4.app.Fr

重回:类,对象,方法,属性

类:是抽象的东西,eg:Human 对象:具体的,eg:Chinese 方法:对象具有的能力(函数),eg:Chinese.eat() 属性:属性是类的一个变量,eg:public class a public class a { public string a; public int b; }

Spring懒加载机制

Spring默认会在容器初始化的过程中,解析xml,并将单例的bean创建并保存到map中,这样的机制在bean比较少时问题不大,但一旦bean非常多时,spring需要在启动的过程中花费大量的时间来创建bean 花费大量的空间存储bean,但这些bean可能很久都用不上,这种在启动时在时间和空间上的浪费显得非常的不值得. 所以Spring提供了懒加载机制.所谓的懒加载机制就是可以规定指定的bean不在启动时立即创建,而是在后续第一次用到时才创建,从而减轻在启动过程中对时间和内存的消耗. 懒加载

018 关联映射文件中<class>标签中的lazy(懒加载)属性

Lazy(懒加载): 只有在正真使用该对象时,才会创建这个对象 Hibernate中的lazy(懒加载): 只有我们在正真使用时,它才会发出SQL语句,给我们去查询,如果不使用对象则不会发SQL语句进行查询. Hibernate中lazy(懒加载)的实现: 采用了第三方组件的库,这个库叫cglib.jar(比较流行),这个库对我们的类生成代理类(JDK的动态代理,只能对JDK中实现了接口的类进行代理),代理可以控制源对象并且可以对源对象的功能进行增强,而cglib.jar可以对类进行代理(cgl

边练边学--plist文件,懒加载,模型初使用--补充instancetype

一.什么是plist文件 1>将数据直接写在代码里面,不是一种合理的做法.如果数据经常修改,就要经常翻开对应的代码进行修改,造成代码扩展性低 2>因此,可以考虑将经常变得数据放在文件中进行存储,程序启动后从文件中读取最新的数据.如果要变动数据,直接修改数据文件即可,不用修改代码 3>一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也成为“plist文件” 二.创建plist文件 三.解析plist文件 代码实

懒加载 字典转模型 自定义cell

1 懒加载: 1>  什么是懒加载? 懒加载又称为延时加载,即在系统调用的时候加载,如果系统不调用则不会加载.所谓的懒加载其实就是重写其 get 方法. 2>  特点:在使用懒加载的时候要先判断该方法是否已经存在,如果不存在则再进行实例化. 3>  优点: 不必将创建对象的方法都写在 viewDidLoad 里面,代码可读性更强. 每个控件的getter 方法分别负责各自的实例化处理,独立性强,耦合性低. 4>  使用步骤: 声明一个属性.该属性可以是私有属性也可以是在. h 文件

【java】itoo项目实战之hibernate 懒加载优化性能

在做itoo 3.0 的时候,考评系统想要上线,就开始导入数据了,只导入学生2万条数据,但是导入的速度特别的慢,这个慢的原因是因为导入的时候进行了过多的IO操作.但是导入成功之后,查询学生的速度更加慢,因为底层用了hibernate的hql语句进行查询的,学习过hibernate的人都知道,如果hibernate不设置懒加载的话,只有是有关联的数据都会一次性全部都查询出来,我试了试,查询2万条数据,最深的级联查询是有5层,然后发出来的语句是460条,时间大概是10s.然后就考虑使用lazy进行优