今天做项目遇到一个问题,在一个类中定义了一个可变数组,使用的是copy的内存管理策略

当往数组中添加包装好的基本数据的时候,程序直接崩溃了。解决方法:把copy换成strong就不会崩溃了;

后来做了个测试,并没有很清楚问题出在哪里,如果有人知道请指教

新建一个工程 Single View Application

新建一个Pesrson类

Person.h

@interface Person : NSObject

@property (nonatomic, copy) NSMutableArray *testArr;
@property (nonatomic , copy) NSMutableDictionary *testDic; @end

Person.m

@implementation Person

- (instancetype)init
{
self = [super init];
if (self) {
self.testArr = [NSMutableArray array];
self.testDic = [NSMutableDictionary dictionary];
}
return self;
} @end

ViewController.m

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad]; Person *person = [[Person alloc] init]; [person.testArr addObject:[NSValue valueWithCGRect:CGRectZero]]; } @end

运行后程序崩溃,

reason: '-[__NSArray0 addObject:]: unrecognized selector sent to instance 0x7f83b25009f0

只要是向可变字典/可变数组 中添加NSValue类型的对象,都会出现这种情况;

然后我新建了一个Command Line Toll

同样新建一个Person类做同样的测试(使用copy的内存管理策略)

main.m

int main(int argc, const char * argv[]) {
@autoreleasepool { Person *p1 = [[Person alloc] init];
[p1.testArr addObject:[NSValue valueWithRect:CGRectZero]];
NSLog(@"%@",p1.testArr);
}
return 0;
}

打印结果

2016-01-21 00:17:42.953 test[1465:80006] (

    "NSRect: {{0, 0}, {0, 0}}"

)

可以正常打印,一直没明白这当中问题出在哪里,如果有人知道请指教

--------------------------------------------------------------已解决:

copy拷贝出来的是一个不可变数组,对它添加元素就会造成crash

NSMutableArray,NSMutableDictionary的内存管问题的更多相关文章

  1. iOS:小技巧(不断更新)

    记录下一些不常用技巧,以防忘记,复制用. 1.获取当前的View在Window的frame: UIWindow * window=[[[UIApplication sharedApplication] ...

  2. iOS 中的 HotFix 方案总结详解

    相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dynamic Framework(Ap ...

  3. 4.4 多线程进阶篇<下>(NSOperation)

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人"简书" 本文源码 Demo 详见 Github https://github.c ...

  4. iOS中常见 Crash 及解决方案

    来源:枫影JustinYan 链接:http://justinyan.me/post/1609 一.访问了一个已经被释放的对象 在不使用 ARC 的时候,内存要自己管理,这时重复或过早释放都有可能导致 ...

  5. JSPatch 实现原理详解

    原文地址https://github.com/bang590/JSPatch/wiki/JSPatch-%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86%E8%AF%A6%E8 ...

  6. iOS 常见 Crash 及解决方案

    一.访问了一个已经被释放的对象 在不使用 ARC 的时候,内存要自己管理,这时重复或过早释放都有可能导致 Crash. 例子 NSObject * aObj = [[NSObject alloc] i ...

  7. [OC Foundation框架 - 17] copy语法

    一个对象使用copy或mutableCopy方法可以创建对象的副本 1.copy 需要实现NSCopying协议 创建出来的是不可变副本,如NSString, NSArray, NSDictionar ...

  8. 用法总结:NSArray,NSSet,NSDictionary-备用

    Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序集合(数组)NSSet 用于对象无序集合      (集合)NS ...

  9. QQ空间掉帧率优化实战

    商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. WeTest 导读 空间新业务需求日益增多,在业务开发阶段的疏忽,或者是受到其他业务的影响(比如一些非空间的业务网络回包或者逻辑在主线程 ...

随机推荐

  1. sql server中分布式查询随笔

    由于业务逻辑的多样性 经常得在sql server中查询不同数据库中数据 这就产生了分布式查询的需求 现我将开发中遇到的几种查询总结如下: 1.access版本 --建立连接服务器 exec sp_a ...

  2. MyEclipse build path修改问题

  3. DOM方式解析XML文件实例

    books.XML文件: <?xml version="1.0" encoding="utf-8"?><bookstore>    &l ...

  4. About 'atoi'

    在很多地方我们看到的都是:atoi 是一个 C Reference function atoi() convert a string to an integer. This function of s ...

  5. Python快速入门学习笔记(一)

    本篇文章适合有其他高级语言基础的人群阅读 使用的Python版本为python2.7 使用的编辑器为Sublime Text3 世界始于Hello World: print 'Hello world' ...

  6. 用函数的地址调用函数 C++ MFC

    先说一段废话,幸亏我汇编基础(基础 基础 基础)扎实,否则这个问题真的恶心到我了正题  因为有特殊需求, 需要写一个类似于接口的功能,但是因为用到的次数不多再加上C++写接口各种麻烦所以想通过函数的地 ...

  7. 九度OJ 1480 最大上升子序列和 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1480 题目描述: 一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列 ...

  8. socket通信_笔记

    (socket通信) 客户端与服务器端通信问题: 我们首先要了解一个概念性的词汇:Socket socket的英文原义是“孔”或“插座”.作为进程通信机制,取后一种意思.通常也称作“套接字”,用于描述 ...

  9. git 使用事项

    基本安装可查看 http://help.github.com 如果删除了本地的文件,要恢复相关文件,在github存在(别人增加的),则:git pull <远程主机名> <远程分支 ...

  10. php 加密解密方法

    <?php//可用于加密解密,如cookie,账号,手机号 as so on class DES { var $key; var $iv; //偏移量 function __construct( ...