swift中的static属性什么时候static 分配内存存

前面我们基本上把Swift的基本内容过了一边, 但这并不足以让我们在开发中良好的运用, 现在让我们继续来往下学习吧:
1.全局变量和局部变量
在前面我们讲解了计算属性和属性监视器, 它们所描述的模式也是可以用于全局变量和局部变量, 所谓的全局变量和局部变量其实是和OC中里的一致, 没有多大区别,
并且全局或局部变量都属于存储型变量, 跟存储属性类似, 它提供特定类型的存储空间, 并允许读取和写入。
另外, 在全局或局部范围都可以定义计算型变量和为存储型变量定义监视器,计算型变量跟计算属性一样, 返回一个计算的值而不是存储值, 声明格式也完全一样。
PS: 全局的常量或变量都是延迟计算的, 跟延迟存储属性相似, 不同的地方在于, 全局的常量或变量不需要标记 lazy 特性; 局部范围的常量或变量不会延迟计算。
2.类型属性
在我们实际开发中, 实例的属性是属于特殊的类型属性, 同时也可以为类型本身定义属性, 不管类型有多少个实例,这些属性都只有唯一一份, 这种属性就是类型属性。
类型属性用于定义特定类型所有实例共享的数据,比如所有实例都能用的一个常量, 或者所有实例都能访问的一个变量.
对于值类型(指结构体和枚举)可以定义存储型和计算型类型属性, 对于类(class)则只能定义计算型类型属性, 值类型的存储型类型属性可以是变量或常量, 计算型类型属性跟实例的计算属性一样定义成变量属性.
PS: 跟实例的存储属性不同,必须给存储型类型属性指定默认值,因为类型本身无法在初始化过程中使用构造器给类型属性赋值。
3.类型属性语法
在 C 或 Objective-C 中, 静态常量和静态变量的定义是通过特定类型加上 global 关键字, 在 Swift 编程语言中, 类型属性是作为类型定义的一部分写在类型最外层的花括号内, 因此它的作用范围也就在类型支持的范围内.
使用关键字 static 来定义值类型的类型属性,关键字 class 来为类(class)定义类型属性, 比如:
struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
enum SomeEnumeration {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
class SomeClass {
class var computedTypeProperty: Int {
PS: 例子中的计算型类型属性是只读的, 但也可以定义可读可写的计算型类型属性, 跟实例计算属性的语法类似.
4.获取和设置类型属性的值
在上面的例子, 我们是定义好了属性, 如果我们要取里面的属性, 是和我们在实例的时候一致的, 比如:
println(putedTypeProperty)
println(SomeStructure.storedTypeProperty)
SomeStructure.storedTypeProperty = "Another value."
println(SomeStructure.storedTypeProperty)
这样子我们就可以访问类型中的属性了, 还有另外一个例子, 让我们来看看:
struct AudioChannel {
static let thresholdLevel = 10
static var maxInputLevelForAllChannels = 0
var currentLevel: Int = 0 {
if currentLevel & AudioChannel.thresholdLevel {
currentLevel = AudioChannel.thresholdLevel
if currentLevel & AudioChannel.maxInputLevelForAllChannels {
AudioChannel.maxInputLevelForAllChannels = currentLevel
var leftChannel = AudioChannel()
var rightChannel = AudioChannel()
leftChannel.currentLevel = 7
println(leftChannel.currentLevel)
println(AudioChannel.maxInputLevelForAllChannels)
rightChannel.currentLevel = 11
println(rightChannel.currentLevel)
println(AudioChannel.maxInputLevelForAllChannels)
PS: 由于上面做了个限制, 该电频最高就只能到达10, 所以一旦你输入大于10的数, 这里都会默认输出10.
好了, 这次我们就讲到这里, 下次我们继续~
本文已收录于以下专栏:
相关文章推荐
静态全局变量分swift和oc版
swift版相对比较简单
struct Example {
    static
var example:String =
全局变量和局部变量
计算属性和属性监视器所描述的模式也可以用于全局变量和局部变量,全局变量是在函数、方法、闭包或任何类型之外定义的变量,局部变量是在函数、方法或闭包内部定义的变量。
转自:http://imtx.me/archives/1916.html
半年前在第一时间接触 Swift,还参与过一次主题演讲(见《和 Swift 亲密接触的这半个月…》)不过...
在OC编程时,我们可以使用一个prefix文件对于常用的变量和常量甚至方法进行定义,(比如SCREEN_WIDTH)以提高开发效率,然而在swift开发的时候,这样的做法就会比较麻烦,因为涉及到oc和...
static变量与全局、局部变量的区别
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。 这两者在存储方式上并...
预处理指令
Swift编译器不包含预处理器。取而代之的是,它充分利用了编译时属性,生成配置和语言特性来完成相同的功能。因此,Swift没有引进预处理指令。
变量声明1、普通变量swift 像javascript一样是可以智能推断类型的,他会根据我们变量的值来推断变量的类型
var age = 10
全局变量和局部变量
计算属性和属性监视器所描述的模式也可以用于全局变量和局部变量,全局变量是在函数、方法、闭包或任何类型之外定义的变量,局部变量是在函数、方法或闭包内部定义的变量。
前面章节提到的...
Swift、Xcode和Cocoa入门指南(iOS9
Programming Fundamentals With swift)
第三章 变量与简单类型
         
       &#1...
如题, 例如一个变量是 String , Or  UInt8  怎么将变量类型输出出来
他的最新文章
讲师:AI100
讲师:谢梁
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)php面向对象中static静态属性与方法的内存位置分析
作者:php之路
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了php面向对象中static静态属性与方法的内存位置,通过内存位置实例分析了static静态属性的原理与使用技巧,需要的朋友可以参考下
本文实例分析了php面向对象中static静态属性与方法的内存位置。分享给大家供大家参考。具体如下:
static静态属性的内存位置——&类,而不是对象。下面做测试来证明一下
header("content-type:text/charset=utf-8");
class Human{
static public $name = "小妹";
public function tell(){
echo Human:$
//不依赖于对象,就能直接访问。因为静态属性的内存位置是在类里,而不是对象。
$p1 = new Human();
$p2 = new Human();
print_r($p1);
echo $p1::$name = "夫人";
//在$p1对象上改变静态属性的值,那$p2对象也会相应的改变。
echo $p2::$
输出结果可以看出:
1、echo Human:$name :类声明完毕,就存在static属性,并不依赖于对象。因此,静态属性只有一个(意思是在内存里,存放的位置并不是在对象里;如果在对象里,那实例化一个对象,就相应的有该静态的位置,如height属性);
2、print_r($p1):打印结果只有height属性,而没有name;
3、静态属性的值变化后,所有对象的该属性值都会受到影响。
对于方法,无论是静态的、还是普通的,都是存在于类内存空间中。证明也很简单,new一个对象,print_r(对象)即可。
希望本文所述对大家的php程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具2015年12月 C/C++大版内专家分月排行榜第三2015年11月 C/C++大版内专家分月排行榜第三
2016年10月优秀大版主2016年8月优秀大版主
2016年9月 总版技术专家分月排行榜第二
2016年2月 C/C++大版内专家分月排行榜第三2016年1月 C/C++大版内专家分月排行榜第三
2016年5月 总版技术专家分月排行榜第二
2016年10月优秀大版主2016年8月论坛优秀大版主
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。Static变量在项目启动时就分配内存,直到程序结束释放内存。
Static方法只有在调用的时候才开始分配内存,因为static方法肯定在类里面,并没有实例化类,所以只有在调用static方法的时候才开始分配内存。
释放时分几种情况:
1.static方法重点额static和const变量在项目启动时就已经分配内存了,而且方法调用之后也不会被释放。
2.static方法中的值变量(如:int型)在变量声明时才开始分配内存,它在超出它的作用域后马上释放。
3.static方法中的引用型变量要看它的的使用者,当static方法调用后它是否被释放决定于该对象是否仍然被使用。
本文已收录于以下专栏:
相关文章推荐
1.什么是Comparable接口
此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)...
反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。
那么什么是Java的反射呢?
       大家都知道,要让Java程...
Final的特点;.Final的作用;Final变量的赋值;final和static的区别与联系;private与final;
我讲解一下c语言中动态分配内存的函数,可能有些初学c语言的人不免要问了:我们为什么要通过函数来实现动态分配内存呢?系统难道不是会自动分配内存吗??既然有人会问这样的问题,那么我在这里好好的讲解一下吧!...
C#类在什么时候分配内存
         一直以为内存分配是在调用构造函数的时候。现在发现我错了。
         昨天在看C++的...
个人测试:
Class c = staticPack.Word.
与 Class.forName(&staticPack.Word&,false,off.getClass()....
什么时候使用静态?
要从两方面下手:
因为静态修饰的内容有成员变量和函数
什么时候定义静态的变量(类变量)呢?
当对象中出现共享数据时,该数据被静态所修饰
对象中的特有数据要定义成非静态存在...
一.Java访问权限饰词(access specifiers)
Java有public、protect、friendly、private四种访问权限,并且这四访问权限的访问范围越来越小。
我们本篇先了解类装载器的基础,重点说的是:static什么时候初始化**
下一篇我们就可以深入Java的类装载器,我们先看看有几种方法载入类。
一.想必大家都知道用new这个关键字:B.java...
他的最新文章
讲师:AI100
讲师:谢梁
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 static 不分配内存 的文章

 

随机推荐