所以,我在我的代码中有一个位置,我分离一个线程,它运行正常.
直到我在iOS 4.3上运行代码,然后它带有数十亿个" NSCFString自动释放的对象0x1045660,没有池到位 - 只是泄漏"错误的香蕉.
但我不能在线程调用的方法中放置一个自动释放池,因为NSAutoReleasePool当ARC打开时无法使用.
那么,怎么办?
我一直在阅读不同的自动引用计数来源,但没有找到任何可以澄清我理解的精彩文章或文档.我对ARC(自动引用计数)的理解是,它完全接管开发人员对内存管理的控制并将其分配给编译器来进行内存管理.
我在想吗?
那么这是否意味着iOS 5 SDK不再支持保留,发布和自动释放?
让我说我用来制作这样的物体,
UIView *message = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, cell.frame.size.width, cell.frame.size.height)];
message.tag = 0;
[message addSubview:balloonView];
[message addSubview:label];
[cell.contentView addSubview:message];
[balloonView release];
[label release];
[message release];
Run Code Online (Sandbox Code Playgroud)
如果ARC打开,将会变成这样
UIView *message = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, cell.frame.size.width, cell.frame.size.height)];
message.tag = 0;
[message addSubview:balloonView];
[message addSubview:label];
[cell.contentView addSubview:message];
Run Code Online (Sandbox Code Playgroud)
任何输入都会有所帮助,谢谢
干杯!
我转到我的ios5应用程序上的自动引用计数,但我有2或3个文件,它们是如此复杂,以便为弧进行转换.那么,是否可以指定某个文件不会使用弧?
抱歉我的英语非常糟糕...希望你理解.
嗨我对xcode 4.2内存管理系统有疑问.我在这里读到,在xcode 4中你不需要担心内存分配,而且我正在做一个教程,但是每次我提到realease或autorelease的alloc时都会出错,比如ARC禁止dealloc的显式消息或像那.从现在起我应该忽略对alloc dealloc和release的所有引用吗?或者最好关闭那个ARC的东西?因为我是新手,所以提前告知你的建议
你能帮我解决这个错误吗?我用ARC和非ARC试过这段代码.用ARC就可以了.但非ARC.我该怎么办?请帮帮我.^ __ ^;
当我按下按钮时,会发生错误.**
#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController {
void (^_myOne)(void);
UIView* _viewOne;
}
@property (nonatomic, retain) void (^myOne)(void);
@property (nonatomic, retain) UIView* viewOne;
- (void)useFirstOne:(void(^)(void))blockOne;
@end
#import "FirstViewController.h"
@implementation FirstViewController
@synthesize myOne = _myOne, viewOne = _viewOne;
- (void)useFirstOne:(void (^)(void))blockOne {
blockOne ();
}
- (void)buttonPressed {
[self useFirstOne:self.myOne]; //If I put this line into 'viewDidLoad', has no problem.
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor redColor];
UIButton* buttonA = [UIButton buttonWithType:UIButtonTypeRoundedRect];
buttonA.frame = CGRectMake(0, …Run Code Online (Sandbox Code Playgroud) memory-leaks objective-c ios objective-c-blocks automatic-ref-counting
我正在使用RestKit开发RESTful应用程序.我有一个实际处理请求的包装器对象,甚至可以作为delegatefor RKObjectManager.我遇到了一个与ARC如何处理实例变量并保留它们有关的问题,我很清楚我不明白ARC是如何工作的.
所以当我这样做时,它会失败(与发送到解除分配的实例的消息有关的错误)
MyTestClient *testClient = [[MyTestClient alloc] init];
但是当我宣布一个房产并做到这一点时,一切都很好:
self.testClient = [[MyTestClient alloc] init];
根据我的理解,在ARC下,实例变量始终strong是默认的,但它的生命周期是声明它的方法的范围.
既然我不能做[testClient retain],我唯一的选择是把它作为财产吗?
memory-management objective-c ios restkit automatic-ref-counting
我有一个视图控制器,我存储在一个可变数组中.
- (void)pushViewController:(KAViewController *)viewController
{
[self.viewControllers addObject:viewController];
if (self.count == 0)
[self.view addSubview:viewController.view];
else
[self transitionFromView:self.currentViewController.view toView:viewController.view];
}
Run Code Online (Sandbox Code Playgroud)
数组(viewControllers)定义为:
@property (nonatomic, retain) NSMutableArray *viewControllers;
Run Code Online (Sandbox Code Playgroud)
视图有一个按钮,当我点击它时,我收到以下消息:
[KAGameInfoViewController performSelector:withObject:withObject:]:发送到解除分配的实例0x6e6e900的消息
我已经确认0x6e6e900是我的视图控制器的地址.
有什么想法吗?
编辑
关闭ARC修复问题.
现在它没有ARC中的复制属性,所以当我想复制一个对象时该怎么做?然后我写了一个测试代码:
test.h
@property (strong, nonatomic) NSMutableString *str1;
@property (strong, nonatomic) NSMutableString *str2;
Run Code Online (Sandbox Code Playgroud)
test.m
self.str1 = [[NSMutableString alloc] initWithString:@"Hello"];
self.str2 = [self.str1 copy];
[self.str2 appendString:@"World"];
NSLog(@"str1:%@,str2:%@",self.str1,self.str2);
Run Code Online (Sandbox Code Playgroud)
当我跑,它崩溃了:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with appendString:'
Run Code Online (Sandbox Code Playgroud)
那么,我该怎么办?
使用ARC编译的应用程序是否适用于以前的(<5.0)版本的iOS?
cocoa-touch objective-c backwards-compatibility automatic-ref-counting
我花了两天的时间改变它与ARC一起工作后,我的应用运行缓慢.
我犯了一些错误让它慢了?或者ARC有点慢?