1
kkhaike 2015-01-15 12:14:29 +08:00
int* 在oc里不是对象,你就把他当值吧,在block里是没有block内strong列表保护的,你传入async后,这个函数内部栈值count都不知道哪里去了
|
2
canautumn 2015-01-15 12:49:40 +08:00
应该说清楚怎么个不一样法?
|
4
kkhaike 2015-01-15 13:17:49 +08:00
你把它过度到对象试试 NSNumber
|
7
canautumn 2015-01-15 13:40:22 +08:00
@Mr2 那应该就是async调用count地址的时候,count已经超出生命周期被释放了。因为你声明了一个局部变量NSUInteger在栈上。(NSUInteger就是unsigned long,是个C类型,block是不会对C类型保留强引用的,更何况是在栈上的)你改用NSNumber*就可以了。不能修改的话就重新创建一个赋给count。
|
8
canautumn 2015-01-15 13:49:10 +08:00
或者自己写一个wrapper类。顺便,如果你malloc的话,在堆上新建一个NSUInteger* 也是可以的,不过就要手动释放内存了,这个就太扯淡了。问题的关键就在于NSUInteger不是一个类,没办法享受objc对类实现的自动内存管理,所以显然不适用于这种情形。所以两个错误,一是取指向栈的指针传给其他线程、二是在这种情形下应该用类,不能用基本C类型。
|
10
kkhaike 2015-01-15 13:55:49 +08:00
看你的例子没有想过你中间可能还要变更值的情况,NSMutableArray中携带个NSNumber或者自己顶一个类用int属性都成
|