Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何时发布CATTransition动画?(iphone)_Iphone_Objective C_Cocoa Touch_Memory Management - Fatal编程技术网

何时发布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也是一个类方法,必须释放从它返回的值。