ica*_*ant 10 ios automatic-ref-counting
我正在使用iOS 5 SDK开发iOS应用程序,启用了自动引用计数.但我有一个特定的对象正在大量创建,必须在一秒钟之后释放,否则设备将变得非常慢.看起来它们没有被释放,因为设备非常慢.有没有办法在启用ARC时手动释放对象?
编辑:我的代码,这被称为每秒200次生成火花.它们在0.8秒后淡出,因此在那之后它们没用了.
int xanimationdiff = arc4random() % 30;
int yanimationdiff = arc4random() % 30;
if (arc4random()%2 == 0) {
xanimationdiff = xanimationdiff * -1;
}
if (arc4random()%2 == 0) {
yanimationdiff = yanimationdiff * -1;
}
Sparkle *newSparkle = [[Sparkle alloc] initWithFrame:CGRectMake(20 + arc4random() % 280, 20, 10, 10)];
//[newSparkle setTransform:CGAffineTransformMakeRotation(arc4random() * (M_PI * 360 / 180))]; //Rotatie instellen (was niet mooi, net sneeuw)
[self.view addSubview:newSparkle];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8];
[newSparkle setFrame:CGRectMake(newSparkle.frame.origin.x - xanimationdiff, newSparkle.frame.origin.y - yanimationdiff, newSparkle.frame.size.width, newSparkle.frame.size.height)];
newSparkle.alpha = 0;
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
闪光对象代码:
#import "Sparkle.h"
@implementation Sparkle
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"sparkle.png"]]];
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
The*_*Rat 50
Object* myObject = [[Object alloc] init];
myObject = nil; // poof...
Run Code Online (Sandbox Code Playgroud)
编辑:您不能直接控制何时释放对象但是您可以间接导致它发生.怎么样?记住ARC确实做了什么.与人类编码约定不同,ARC会解析您的代码并插入发布语句,因为即使是对象也可以发布.这可以立即释放内存以进行新的分配,这非常棒/必要.意思是,将对象设置为nil,或者只是允许变量超出范围......导致A 0 RETAIN COUNT的事情迫使ARC在其中放置其释放调用.它必须......因为否则会泄漏.
使用 ARC,您不能调用 dealloc、release或retain,尽管您仍然可以保留和释放 CoreFoundation 对象(注意:您可以dealloc为自己的自定义子类实现方法,但不能调用super dealloc)。所以简单的答案是“不”,不幸的是,在使用 ARC 时您无法手动释放对象。
我会仔细检查你确定它们没有被释放,因为理论上如果你不再引用一个对象它应该被释放。创建这些对象后,您将如何处理它们?你只是简单地创建它们然后立即销毁它们?
也许您可以发布您正在使用的代码/属性声明 - 这些是对象weak还是strong引用的对象?
| 归档时间: |
|
| 查看次数: |
26071 次 |
| 最近记录: |