在solidity语言中引用类型修饰符(引用类型为存储空间不固定的数值类型)memory、calldata与storage,它们只能修饰引用类型变量,比如字符串、数组、字节等...memory适用于方法传参、返参或在方法体内使用,使用完就会清除掉,释放内存calldata仅适用于方法传参,修饰该变量的值不能修改storage仅适用于方法体内,而且它的指针必须指向链上数据。使用完,链上数据将保存最新状态 常量修饰符constant编译前已经确定,编译后不能再修改常量的值constant它不是状态变量,所以它不储存在插槽(Slot)里面,获取该常量的方法修饰必须是Pure,而不是Viewimmut
Viewpure修饰符:使用view与pure不需要gweiview:不能修改链上数据只能访问pure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用contract ViewPureExample{ uint public age; function increaseAge() public{ age++;} function GetViewAge() public view returns(uint){ //view修饰 //age++;//不可修改变量 return age;} function GetPureAge(uint age) public
Viewpure修饰符:使用view与pure不需要gweiview:不能修改链上数据只能访问pure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用contract ViewPureExample{ uint public age; function increaseAge() public{ age++;} function GetViewAge() public view returns(uint){ //view修饰 //age++;//不可修改变量 return age;} function GetPureAge(uint age) public
探究系列已发布文章列表,有兴趣的同学可以翻阅一下:第一篇|iOS属性@property详细探究第二篇|iOS深入理解Block使用及原理第三篇|iOS类别Category和扩展Extension及关联对象详解第四篇|iOS常用锁NSLock,@synchronized等的底层实现详解第五篇|iOS全面理解Nullability-------正文开始-------引言日常开发过程中,我们经常会碰到空值、空指针、空对象、空的占位对象等。在一些情况下,如果判断不好或者处理方式不对,可能会引起程序运行异常,有些特殊情况甚至会导致Crash,因此,熟练了解掌握它们之间的区别,将有助于我们写出更高质量的代
探究系列已发布文章列表,有兴趣的同学可以翻阅一下:第一篇|iOS属性@property详细探究第二篇|iOS深入理解Block使用及原理第三篇|iOS类别Category和扩展Extension及关联对象详解第四篇|iOS常用锁NSLock,@synchronized等的底层实现详解第五篇|iOS全面理解Nullability-------正文开始-------引言日常开发过程中,我们经常会碰到空值、空指针、空对象、空的占位对象等。在一些情况下,如果判断不好或者处理方式不对,可能会引起程序运行异常,有些特殊情况甚至会导致Crash,因此,熟练了解掌握它们之间的区别,将有助于我们写出更高质量的代
分析:NSString、NSArray、NSDictionary含有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary,他们之间可能进行赋值操作(就是把可变的赋值给不可变的),为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。经常使用copy修饰是因为:1、遵循父类指针可以指向子类对象原理,使用copy修饰是为了让本对象的属性不受外界影响,无论给我传入是一个可变对象还是不可对象,我本身持有的是一个不可变的副本。2、如果我们使用是strong,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,
映射类型1.映射类型当你不要重复使用当前类型,有时又需要一个与当前类型结构相同的类型,一句一种类型生成一种新型类型,这就是映射类型.映射类型是建立在索引签名的语法之上的,用于声明未提前声明的属性类型例如://索引签名typeOnlyBoolean={[key:string]:boolean}constonlyBoolean:OnlyBoolean={del:true,ready:false}//映射类型/*类型参数Type如果接受一个对象类型{name:string,age:number}keyofType将会返回'name'|'age'的联合类型Property只是OptionsFlags类
分析:NSString、NSArray、NSDictionary含有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary,他们之间可能进行赋值操作(就是把可变的赋值给不可变的),为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。经常使用copy修饰是因为:1、遵循父类指针可以指向子类对象原理,使用copy修饰是为了让本对象的属性不受外界影响,无论给我传入是一个可变对象还是不可对象,我本身持有的是一个不可变的副本。2、如果我们使用是strong,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,
映射类型1.映射类型当你不要重复使用当前类型,有时又需要一个与当前类型结构相同的类型,一句一种类型生成一种新型类型,这就是映射类型.映射类型是建立在索引签名的语法之上的,用于声明未提前声明的属性类型例如://索引签名typeOnlyBoolean={[key:string]:boolean}constonlyBoolean:OnlyBoolean={del:true,ready:false}//映射类型/*类型参数Type如果接受一个对象类型{name:string,age:number}keyofType将会返回'name'|'age'的联合类型Property只是OptionsFlags类
逃逸闭包当闭包作为函数的参数,且可能在函数结束之后才被调用,即逃离了函数的作用域,我们就说这个闭包是逃逸闭包。使用修饰形参,明确闭包是允许逃逸的。使用@escaping修饰闭包后,必须在闭包中显示的使用self。可能会产生循环引用,因为需要在闭包中显示的使用self。一般用于异步函数的返回,例如网络请求。非逃逸闭包当闭包作为函数的参数,且是在函数结束之前被调用,我们就说这个闭包是非逃逸闭包。不会产生循环引用,因为闭包的作用域是在函数的作用域内,函数执行完后就会释放掉闭包所捕获的对象。非逃逸闭包捕获的上下文在栈上,不是在堆上。针对非逃逸闭包,编译器会做优化,例如当明确了闭包的生命周期后,就可以省