iOS 结构体 定义变量注意事项以及保存到数组与读取

原创 2015年01月09日 09:42:34


typedef  struct

{   CGFloat  x;

    CGFloat  y ;

}  point;


    结构体通常都是以上这样的,需要注意的结构体内定义的只能是基本数据类型的变量,而不能是对象。如若非要用结构体存放对象也可以,需要在对象前面添加标识__unsafe_unretained,如__unsafe_unretained UIImage *imageNew,但是这样也可能会出现一些奇怪的问题,所以不建议使用,需要定义对象时还是建一个类去存储。

    具体原因是因为:ARC需要在一个合适的位置插入成员的释放行为,在Objective-C中,编译器会把实例成员的release放在该类型的实例方法dealloc中。而由于标准的C结构体,即struct,是没有析构函数的,所以编译器无法在合适的位置插入成员的release操作。从而导致内存泄漏。所以,在ARC项目中,不做特殊处理是无法在struct中声明Objective-C对象的,除非明确指定放弃对所声明对象的内存管理责任,即楼上提到的,将对象定义为__unsafe_unretain,这样ARC就不会想办法插入release操作了


下面是结构体保存到数组与读取

typedef  struct

{   CGFloat  x;

    CGFloat  y ;

}  pointNew;


NSMutableArray *arrayOne = [NSMutableArray array];

//保存

for (unsigned i = 0 ; i<5; i++) {

    pointNew s;

    s.x = i;

    s.y = 1.0;

   

    NSValue *value = nil;

    value = [NSValue valueWithBytes:&s objCType:@encode(pointNew)];

    [arrayOne addObject:value];

}

//读取

for (NSValue *value in arrayOne) {

     pointNew s;

    [value getValue:&s];

    NSLog(@"%f",s.x);

}





版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS 自定义结构体、结构体转换成对象

1、新建一个头文件,如下代码: #ifndef Header_h #define Header_h struct MyStruce{     char *nam...
  • u010244140
  • u010244140
  • 2016年03月09日 16:41
  • 4474

ios学习之旅------玩转结构体

1.全局变量和局部变量 局部变量:     概念:定义函数内部变量     定义格式:变量类型 变量名称;     作用域:从定义那一行开始到所在代码块结束     生命周期:从代码执行到定...
  • sdzh2012
  • sdzh2012
  • 2015年08月20日 09:34
  • 3281

iOS中的常用结构体

// // main.m // Foundation_结构体 // // Created by Unisk on 13-9-14. // Copyright (c) 2013年 Test. A...
  • cmdkmd
  • cmdkmd
  • 2013年09月14日 20:51
  • 6431

iOS开发中结构体的另一种“初始化方法”

结构体的另类“初始化方法”
  • qinqi376990311
  • qinqi376990311
  • 2017年06月19日 10:26
  • 544

iOS结构体的内存分配问题

结构体内存分配问题(转) 1)sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用。 (2)终于搞懂struct结构体内存分配问题了,结构体中各个成员字节对齐遵循以下...
  • Erice_e
  • Erice_e
  • 2017年06月03日 11:55
  • 361

iOS笔记—对象的结构体属性单个修改方式

Objective-C语法规定,对象的结构体属性不能单个修改。如果是单独定义的结构体属性则可以单个修改。如象的结构体属性: self.view.frame.size.width = 10;// 编译器...
  • csdn_hhg
  • csdn_hhg
  • 2017年04月06日 13:56
  • 490

【iOS开发】结构体如何存入数组中

1、常见结构体的储存 比较常见的结构体:CGPoint  ,CGSize,CGRect。。。。。。我们如何存放到数组中呢?因为是结构体不是对象,不能添加到数组中,解决方法:把这些常见的结构装换成对象...
  • wm9028
  • wm9028
  • 2016年02月17日 18:03
  • 5201

iOS Class结构体分析~详解

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄 objc_class结构体 一、类在OC中是objc_class的结构体指针   typed...
  • shihuboke
  • shihuboke
  • 2017年06月30日 08:39
  • 307

ios深度解析之Swift(结构体和类,属性)

// 结构体 和 类 // 在Swift中,结构体被做了很对强化 几乎所有的数据类型都是用结构体实现的 // 相同点: 1.都可以定义变量 2.都可以定义方法 3.都可以定义构造器 Int 4.都可...
  • liyuBlog
  • liyuBlog
  • 2015年10月23日 22:04
  • 277

iOS学习笔记(三)——iOS系统架构

iOS的系统架构分为四个层次:核心操作系统层(Core OS layer)、核心服务层(Core Services layer)、媒体层(Media layer)和可触摸层(Cocoa Touch l...
  • xyz_lmn
  • xyz_lmn
  • 2013年05月24日 21:01
  • 50797
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 结构体 定义变量注意事项以及保存到数组与读取
举报原因:
原因补充:

(最多只允许输入30个字)