• UIPopoverController在ARC环境下用法注意


    在ARC环境下如果便用以下代码:

    1. UIViewController *viewTwo;  
    2. viewTwo = [[ViewTwo alloc] initWithNibName:@"ViewTwo" bundle:nil];  
    3.   
    4. UIPopoverController *popover;  
    5. popover = [[UIPopoverController alloc] initWithContentViewController:viewTwo];    
    6.   
    7. [popover presentPopoverFromRect:[theButton bounds]   
    8.                          inView:theButton   
    9.        permittedArrowDirections:UIPopoverArrowDirectionLeft   
    10.                        animated:NO];  
    UIViewController *viewTwo;
    viewTwo = [[ViewTwo alloc] initWithNibName:@"ViewTwo" bundle:nil];
    
    UIPopoverController *popover;
    popover = [[UIPopoverController alloc] initWithContentViewController:viewTwo];  
    
    [popover presentPopoverFromRect:[theButton bounds] 
                             inView:theButton 
           permittedArrowDirections:UIPopoverArrowDirectionLeft 
                           animated:NO];


    结果会crash,原因是ARC环境下,popover是它的作用域中是有效的,如果起出其作用域就会被编译器加入的release释放内存。由于当前popup还在显示期,而controller被回收了,所以会出现crash。xcode的console里crash的reason就有说明。

    于是在ARC环境下正确的做法是保持popover的生命周期。让popover是strong类型的成员变量或属性。 当收到UIPopoverController dismiss的消息的时候将popover=nil;这样就可以正常便用了。如:

     

    1. - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController  
    2. {  
    3.     popover = nil;  
    4. }  
    - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
    {
        popover = nil;
    }


    还有在iPad下使用UIImagePickerController的时候得注意了,如果它的sourceType是UIImagePickerControllerSourceTypeCamera则可以用[self

    presentModalViewController:vc animated:Yes];的方法显示UIImagePickerController的view用于照相,如果sourceType是UIImagePickerControllerSourceTypePhotoLibrary或UIImagePickerControllerSourceTypeSavedPhotosAlbum 相片选择的UIImagePickerController,那么得将UIImagePickerController放在UIPopoverController中才能正常显示。这是iPad下的规则。

  • 相关阅读:
    Unity3D教程宝典之Shader篇:第四讲制作一个美丽的地球
    Unity3D教程宝典之Shader篇:第三讲Vertex&Fragment Shader
    Unity3D教程宝典之Shader篇:第二讲Fixed Function Shader
    Unity3D教程宝典之Shader篇:第一讲Shader总篇
    向量
    NAV导航网格寻路(7) -- 代码和一些优化
    NAV导航网格寻路(6) -- 寻路实现
    NAV导航网格寻路(5) -- 生成网格的一些补充
    NAV导航网格寻路(4) -- 生成nav网格
    NAV导航网格寻路(3) -- 一些必要的计算几何知识
  • 原文地址:https://www.cnblogs.com/zhwl/p/2846173.html
Copyright © 2020-2023  润新知