1.static 与 class 的区别
- static 可以在类、结构体、或者枚举中使用。而 class 只能在类中使用。
- static 可以修饰存储属性,static 修饰的存储属性称为静态变量(常量)。而 class 不能修饰存储属性。
- static 修饰的计算属性不能被重写。而 class 修饰的可以被重写。
- static 修饰的静态方法不能被重写。而 class 修饰的类方法可以被重写。
- class 修饰的计算属性被重写时,可以使用 static 让其变为静态属性。
- class 修饰的类方法被重写时,可以使用 static 让方法变为静态方法。
http://www.hangge.com/blog/cache/detail_520.html
2.计算属性和储存属性
储存属性
//简单来说,一个存储属性就是存储在特定类或结构体的实例里的一个常量或变量,存储属性可以是变量存储属性(用关键字var定义),也可以是常量存储属性(用关键字let定义)。
let a = "张三"
let b = 123
计算属性
//Swift中重写set和get方法是下面这种。先定义一个变量,当调用set方法的时候,系统会有一个newValue,
//将newVaule赋值给我们定义的变量,然后从get方法里面返回去。Swift中一般重写比较少
var _getUserName:String?
var getUserName:String? {
// willSet{
// print(newValue,_getUserName)
// }
// didSet{
// print(_getUserName)
// }
set{
_getUserName = newValue
}
get{
return _getUserName
}
}
3.类和结构体
class:引用类型(Reference Type),存堆中,可继承
struct:值类型(Value Type),存栈中,不可继承
1.struct 的 function 要去改变 property 的值的時候需要加上 mutating 字樣,而 class 不用這樣做
2.struct比class更“轻量级”,struct分配在栈中,class分配在堆中。
struct SRectangle {
var width = 200
}
extension SRectangle {
mutating func changeWidth(width:Int){
self.width = width
}
}
如何抉择?
通常,在平时的编程中,按照对象的生命周期形态,可以把使用的类型分成两大类:
一类必须有明确生命周期的,它们必须被明确的初始化、使用、最后明确的被释放。例如:文件句柄、数据库连接、线程同步锁等等。这些类型的初始化和释放都不是拷贝内存这么简单,通常,这类内容,我们会选择使用class来实现。
另一类,则是没有那么明显的生命周期。 例如:整数、字符串、URL等等。这些对象一旦被创建之后,就很少被修改,我们只是需要使用这些对象的值,用完之后,我们也无需为这些对象的销毁做更多额外的工作,只是把它们占用的内存回收就好了。这类内容,通常我们会选择使用struct或enum来实现。
网友评论