Tag: dealloc

被取消初始化时,Unowned引用是否设置为“nil”?

我很快就对这个话题感到困惑,因为无主的引用必须总是有一个值,不能是可选的,也就是说它们不能被设置为'nil'….好吧,我只是在Apple文档中看到一个程序对于swift而言,对实例“B”的无主引用的实例“A”被去初始化并且在实例“B”被去初始化/释放之后解除分配……当var被去初始化/ dealloc并不意味着它们是设为'无'? 实例B是一个可选的,所以确保它可以容纳'零',但为什么实例'A'被取消初始化,当它应该总是有一个值? PS:如果这有帮助…..实例'B'是一个可选的types,强烈的引用实例'A'

dealloc不叫改变选项卡

假设有一个带有两个选项卡A和B的标签栏控制器,其中A是一个导航控制器。 当用户在A时,他可以推A1和A2,这两个都是视图控制器。 A2上的后退button,执行: [self.navigationController popViewControllerAnimated:YES]; 这正确地触发了A2上的dealloc方法。 如果用户在A2中,然后切换到标签B,我需要在A2上调用dealloc方法; 因此我在TabBarController中实现了以下方法: – (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { UINavigationController *nc = (UINavigationController*)tabBarController.selectedViewController; [nc popToRootViewControllerAnimated:YES]; return YES; } 但是在这个stream程中,A2的dealloc方法永远不会被调用! 它怎么可能从A2到A1的popup工作,而改变标签的视图控制器不会被释放? 感谢任何提示! 担

处理自动合成属性时如何使用dealloc?

我对iOS开发相对比较陌生,请原谅,如果这是一个迟缓的问题。 我读过这个,但还是有点困惑。 我没有使用ARC。 (是的,我知道我应该,但我不在这一点)在我的课堂标题,我有这个 /*———————————————————————–+ | The name of the sender/receiver +———————————————————————–*/ @property (nonatomic, retain) NSString *name; 我不综合这个variables,但让编译器做这个工作。 以下哪项被认为是dealloc方法的最佳实践 #1 Dealloc的iVar -(void) dealloc { [_name release]; [super dealloc]; } #2 Dealloc的财产 -(void) dealloc { [self.name release]; [super dealloc]; } #3还有最后一个问题。 在dealloc方法中习惯性地将property设置nil ? 即 -(void) dealloc { [self.name release]; self.name = nil; [super dealloc]; } 如果有人能向我解释这一点真的很感激。 […]

为什么dealloc不叫一个全新的项目(xcode 3.1.4)?

我开始学习iPhone编程,这显然是一个非常简单的问题。 我在xcode 3.1.4工作。 现在,当我创build一个基于窗口的应用程序的新项目,并修改dealloc(在AppDelegate.m文件中),以便它实际上在控制台上打印语句时,我实际上看不到该语句。 那么,我的问题是为什么? 为了避免明显的答案,修改的dealloc是: – (void)dealloc { NSLog(@"Dealloc is called"); [window release]; [super dealloc]; } 这是不是很奇怪? 最初我在这里发表了类似的问题,但现在我知道真正的问题是我在这里描述的问题。 版主,随时删除我的另一个线程。 我很抱歉。

挂钩结束ARC dealloc

鉴于以下简单的实现: @implementation RTUDeallocLogger -(void)dealloc { NSLog(@"deallocated"); } @end 我们在ARC下运行以下代码: @implementation RTURunner { NSArray* arr; } -(void)run{ arr = [NSArray arrayWithObjects:[[RTUDeallocLogger alloc]init], [[RTUDeallocLogger alloc]init], [[RTUDeallocLogger alloc]init], nil]; NSLog(@"nulling arr"); arr = NULL; NSLog(@"finished nulling"); } @end 我们得到以下日志输出: 归零 完成归零 重新分配的 重新分配的 重新分配的 在所有释放完成后,我想执行一个操作。 这可能吗? 这个问题的目的是真正理解ARC的机制,特别是ARC在什么时候触发这些释放,以及当我放弃引用时是否会同步发生。

gestureRecognizer shouldReceiveTouch坚持在解除分配视图导致崩溃

我有一个相当简单的UITableView,在堆栈上推新视图。 新视图有一个像这样初始化的gestureRecognizer @synthesize swipeGestureLeft; – (void)viewDidLoad { swipeGestureLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(toggleViewLeft)]; swipeGestureLeft.numberOfTouchesRequired = 1; swipeGestureLeft.delegate=self; swipeGestureLeft.direction = (UISwipeGestureRecognizerDirectionLeft); [self.view addGestureRecognizer:swipeGestureLeft]; } 我也调用委托方法 – (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if (viewShown==1) { return NO; } return YES; } 并在我有dealloc方法 – (void)dealloc { NSLog(@"I AM IN DEALLOC"); swipeGestureLeft.delegate=nil; [self.view removeGestureRecognizer:swipeGestureLeft]; swipeGestureLeft=nil; } 在我的.h文件中 @interface MyViewController […]

iOS8中的AVPlayerItem addobserver问题

您好我正在使用AVPlayer在我的UITableViewCells上播放video,它在iOS 7上工作正常,但在iOS8中它崩溃与以下错误。 'An instance 0x7c01b000 of class AVPlayerItem was deallocated while key value observers were still registered with it. 这是我的代码 – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ……… ……… if(cell.videoPlayer!= nil && cell.videoPlayer.currentItem != nil) { [cell.videoItem removeObserver:self forKeyPath:@"playbackBufferEmpty" context:nil]; [cell.videoItem removeObserver:self forKeyPath:@"playbackLikelyToKeepUp" context:nil]; } cell.videoPlayer = [AVPlayer playerWithPlayerItem:cell.videoItem]; cell.avLayer = [AVPlayerLayer playerLayerWithPlayer:cell.videoPlayer]; cell.videoPlayer.actionAtItemEnd = […]

当使用ARC的NSNotificationCenter代码块方法时,不会调用视图控制器dealloc

当我在视图控制器的-viewDidLoad:方法中使用-addObserverForName: object: queue: usingBlock: for NSNotificationCenter时, -dealloc方法最终不会被调用。 (当我删除-addObserverForName: object: queue: usingBlock: ,再次调用-dealloc 。) 使用-addObserver: selector: name: object:似乎没有这个问题。 我究竟做错了什么? (我的项目正在使用ARC。) 下面是我的实现的一个例子,以防万一我在这里做错了什么: [[NSNotificationCenter defaultCenter] addObserverForName:@"Update result" object:nil queue:nil usingBlock:^(NSNotification *note) { updateResult = YES; }]; 在此先感谢您的帮助。 我已经尝试添加以下(无济于事): – (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; if ([self isMovingFromParentViewController]) { [[NSNotificationCenter defaultCenter] removeObserver:self]; } }

UIPopoverController dealloc获取调用ARC环境

在第二次显示popup窗口控制器(解散popup窗口然后重新显示之后)时,出现以下错误: 终止应用程序,由于未捕获的exception'NSGenericException',原因:' – [UIPopoverController dealloc]达到popup仍然可见。 堆栈跟踪只是一堆hex,SIGABRT每次都发生在UIApplicationMain。 这是button触发的代码: – (IBAction)createNewScore:(id)sender { if (self.pc) if (self.pc.popoverVisible) return; else // Breakpoint is hit here—crashes after this line [self.pc presentPopoverFromBarButtonItem:(UIBarButtonItem *)sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; NGDocumentInfoViewController *documentInfoVC = [[NGDocumentInfoViewController alloc] initWithBlankDocumentTargetInManagedObjectContext:self.context]; UINavigationController *navc = [[UINavigationController alloc] initWithRootViewController:documentInfoVC]; UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneCreatingNewScore:)]; UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel […]

在UIViewController中添加和删除观察者到NSNotificationCenter

看看各种苹果的例子(例如添加音乐 ),我看到他们将观察者添加到viewDidLoad的默认NSNotificationCenter ,然后在dealloc删除它们。 这看起来很危险,因为viewDidLoad可以被调用多次而不需要调用dealloc 。 然后这将多次添加相同的观察者,导致处理程序被多次调用。 解决这个问题的办法也是去除viewDidUnload中的观察者,但是这意味着同样的观察者可能会在dealloc被第二次移除,这似乎是一个潜在的问题。 我错过了什么?