zoukankan      html  css  js  c++  java
  • OC对象里面包含的结构体类型的属性,不能对该结构体属性的成员单个进行修改

    OC对象里面包含的结构体类型的属性,不能对该结构体属性的成员单个进行修改,需要对OC对象的结构体属性整体赋值。

     

    关于网上很多博客写着“结构体类型里面的某个属性如果想要修改是不允许单个修改的” 之解释:

    其实并不是说结构体的成员就一定不能单个修改,例如在某方法中单独定义一个结构体类型的临时变量,是可以对它的成员直接进行修改的。

    只是结构体在作为OC对象的属性使用时,OC语法规定不能单独对OC对象的结构体属性的单个成员进行修改,要改必须通过对对象的结构体属性整体赋值,这样做也确保数据的完整性。

    举例说明:


    ios开发中,UI控件的frame属性是大家最熟悉不过, 例如UIView中定义的 @property(nonatomicCGRect  frame; 

    可以看出CGRect类型的frame作为OC对象UIView的属性,因为OC语法规定不能单独对OC对象的结构体属性的单个成员进行修改,所以UI控件的frame属性的成员变量不能单个进行修改,只能通过对view.frame整体进行赋值。

    像下面这样先定义临时结构体变量btnFrame,获取self.btnTop控件的frame属性值,然后对临时变量btnFrame的成员变量进行修改,之后再重新赋值回去,也就是大家常说的三部曲:(在方法中单独定义的结构体类型的临时变量CGRect btnFrame,虽然btnFrame也是结构体,但并没有作为任何类/对象的属性,所以是可以对它的成员直接进行修改的。)

     

    以下写法是严重错误的,Xcode会直接报错,“变量不可被赋值”,因为OC语法规定不能单独修改OC对象结构体属性的成员变量的值。

    iOS开发者交流群:180080550
  • 相关阅读:
    Fedora 19 配置参考
    Lua 函数、闭包、尾调用总结
    基于MFC简单图片裁剪工具
    【OpenGL 学习笔记04】顶点数组
    【OpenGL 学习笔记03】点画多边形
    【OpenGL 学习笔记02】宽点画线
    【OpenGL 学习笔记01】HelloWorld示例
    【SSH + BootStrap】实现的无线点餐系统
    【C++ 基础 11】 函数指针总结
    【C++基础 10】四种cast转换的区别
  • 原文地址:https://www.cnblogs.com/stevenwuzheng/p/5367722.html
Copyright © 2011-2022 走看看