何时发布CATTransition动画?(iphone)
我用这个代码来制作动画何时发布CATTransition动画?(iphone),iphone,objective-c,cocoa-touch,memory-management,Iphone,Objective C,Cocoa Touch,Memory Management,我用这个代码来制作动画 CATransition *animation = [CATransition animation]; [animation setDuration:0.45f]; [animation setType:kCATransitionPush]; [animation setSubtype:kCATransitionFromRight]; [animation setTimingFunction:[CAMediaTimingFuncti
CATransition *animation = [CATransition animation];
[animation setDuration:0.45f];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromRight];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];
[[theWindow layer] addAnimation:animation forKey:@""];
//[animation release];
我想我应该在处理完动画对象后[释放]它,但如果我这样做,我会在gdb中获得一个EXC\u BAD\u访问
Program received signal: “EXC_BAD_ACCESS”.
(gdb) where
#0 0x93c38688 in objc_msgSend ()
#1 0x30506515 in NSPopAutoreleasePool ()
#2 0x305359f0 in __NSFireDelayedPerform ()
#3 0x302454a0 in CFRunLoopRunSpecific ()
#4 0x30244628 in CFRunLoopRunInMode ()
#5 0x32044c31 in GSEventRunModal ()
#6 0x32044cf6 in GSEventRun ()
#7 0x309021ee in UIApplicationMain ()
...
所以我猜我不应该发布动画
任何人都能解释为什么会这样?我习惯于发布东西,这个案例是这个规则的一个例外。有什么想法吗?您没有发布此动画,因为您没有分配、新建、复制或保留它 来自Cocoa内存管理基础知识:
如果您使用名称以“alloc”或“new”开头或包含“copy”的方法(例如,alloc、newObject或mutableCopy)创建对象,或者向其发送retain消息,则您将获得对象的所有权。您负责放弃使用“释放”或“自动释放”拥有的对象的所有权。其他任何时候,当您收到一个对象时,您都不能释放它。您不能释放此动画,因为您没有分配、新建、复制或保留它 来自Cocoa内存管理基础知识:
如果您使用名称以“alloc”或“new”开头或包含“copy”的方法(例如,alloc、newObject或mutableCopy)创建对象,或者向其发送retain消息,则您将获得对象的所有权。您负责放弃使用“释放”或“自动释放”拥有的对象的所有权。其他任何时候,当您收到一个对象时,您都不能释放它。由于您正在使用类方法进行CAAnimation,因此CAAnimation将自动释放
您不负责释放它,它将在运行循环结束时自动释放。由于您正在使用CAAnimation的Class方法,CAAnimation将自动释放
您不负责释放它,它将在运行循环结束时自动释放。只是为了明确术语,OP调用“类方法”并不是为了避免调用释放。它是特定类方法的名称。例如,alloc也是一个类方法,必须释放从它返回的值。只是为了明确术语,OP调用“类方法”并不是为了避免调用release。它是特定类方法的名称。例如,alloc也是一个类方法,必须释放从它返回的值。