2016-08-01 10:29:37 u012852597 阅读数 1150
  • Android开发之fragment回退栈应用

    本课程将要讲解Android中非常重要的知识点Fragment,Android 3.0中引入fragments 的概念,Fragment使用方式有静态使用和动态使用,开发中常用的知识点有添加,替换,移除,通信,传值。对于Activity,我们知道,可以一步一步的回退,但是对于Fragment该如何处理?本节将对Fragment中的回退栈知识做重点讲解,让你对Fragment的理解更上一层楼!

    3795 人正在学习 去看看 CSDN讲师

Swift中移除通知的方法和OC中移除通知的方法不一样。在OC中移除通知,一般都移除通知的代码放到dealloc方法中,而在Swift中移除通知,使用deinit(类反初始化方法(析构方法))方法。代码如下:

 //MARK:-移除通知
deinit {     NSNotificationCenter.defaultCenter().removeObserver(self)       
    }
2017-09-29 14:50:58 sinat_28585351 阅读数 2137
  • Android开发之fragment回退栈应用

    本课程将要讲解Android中非常重要的知识点Fragment,Android 3.0中引入fragments 的概念,Fragment使用方式有静态使用和动态使用,开发中常用的知识点有添加,替换,移除,通信,传值。对于Activity,我们知道,可以一步一步的回退,但是对于Fragment该如何处理?本节将对Fragment中的回退栈知识做重点讲解,让你对Fragment的理解更上一层楼!

    3795 人正在学习 去看看 CSDN讲师

今天无意中又捯饬了下观察者模式,发现现在项目里同事写的的通知没有进行移除,可是控制器销毁后竟然没有崩溃,查了下资料也没有找到很直观的解释(也可能关键字搜索问题尴尬),就查了下API,有综合了下网上看到的各种博客文章,只是个人理解,还望指正

这里先说下,之所以没有崩溃是因为在iOS9.0后我们才不用移除也不会有异常,而在9.0之前我们还是要手动移除的,这里需要大家注意下

我们都知道在 iOS 开发中我们会经常用到NSNotificationCenter用于对象间通信方式,特别是在针对一对多和跨层通信的时候,而在观察者注册时,通知中心并没有对观察者对象做 retain 处理,而是对观察者对象进行unsafe_unretained 引用,而usafereference与weak reference的区别是当被引用的对象释放时不会自动置为nil,也就是成了野指针,而weak会当被引用的对象释放时自动置为nil,所以也就导致了我们在iOS9.0之前没有手动移除通知的时候对象被释放掉而通知中心就成了野指针,所有造成了崩溃问题,然后在iOS9.0之后通知中心对观察者做了弱引用

2019-05-06 18:00:05 qq_43361450 阅读数 1491
  • Android开发之fragment回退栈应用

    本课程将要讲解Android中非常重要的知识点Fragment,Android 3.0中引入fragments 的概念,Fragment使用方式有静态使用和动态使用,开发中常用的知识点有添加,替换,移除,通信,传值。对于Activity,我们知道,可以一步一步的回退,但是对于Fragment该如何处理?本节将对Fragment中的回退栈知识做重点讲解,让你对Fragment的理解更上一层楼!

    3795 人正在学习 去看看 CSDN讲师
 //通知
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    //注册通知
    [center addObserver:self selector:@selector(textValueChanged:) name:UITextFieldTextDidChangeNotification object:_textf];
#pragma mark 监听文本框内容
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    _str = [NSMutableString stringWithString:textField.text];
    [_str replaceCharactersInRange:range withString:string];
    NSLog(@"%@",_str);
    _st=[NSMutableString stringWithFormat:@"%@.00",self.str];
    
    
    
    
    return YES;
}


///监听文本框的值的改变
- (void)textValueChanged:(NSNotification *)notice
{
    if([_textf.text isEqual: @""] ){
        _btn.enabled = NO;
        
        
    }else{
//        _btn.enabled=NO;
   
    }
}
//移除通知
- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
2016-12-12 16:10:25 iOSTerry 阅读数 3082
  • Android开发之fragment回退栈应用

    本课程将要讲解Android中非常重要的知识点Fragment,Android 3.0中引入fragments 的概念,Fragment使用方式有静态使用和动态使用,开发中常用的知识点有添加,替换,移除,通信,传值。对于Activity,我们知道,可以一步一步的回退,但是对于Fragment该如何处理?本节将对Fragment中的回退栈知识做重点讲解,让你对Fragment的理解更上一层楼!

    3795 人正在学习 去看看 CSDN讲师

在使用通知时,我们要注意在什么时候添加通知观察,什么时候移除通知。

有2种方式

一种是在-view didload中注册通知观察者对应的我们需要在在dealloc中移除通知。因为didload只在view controller生成时执行一次,dealloc也是view controller销毁时才执行,这样对应保证我们不会多次注册通知或者多次移除通知。

另一种就是在viewWillAppear 和viewWillDisappear中进行。这个是只要进入界面中就注册通知,只要离开界面就移除对应的通知。

具体需求根据业务来看。

注意:千万不要在viewWillAppear注册了通知确在dealloc移除通知,这样,你多次进入界面就会生成多个通知,确没有销毁,很有可能造成通知执行对应的方法时重复多次执行。

总结:总之我们使用通知时一定要注意注册了通知在不需要时就要移除,不要重复注册也不要多次移除!

2019-01-21 15:31:22 u011960171 阅读数 818
  • Android开发之fragment回退栈应用

    本课程将要讲解Android中非常重要的知识点Fragment,Android 3.0中引入fragments 的概念,Fragment使用方式有静态使用和动态使用,开发中常用的知识点有添加,替换,移除,通信,传值。对于Activity,我们知道,可以一步一步的回退,但是对于Fragment该如何处理?本节将对Fragment中的回退栈知识做重点讲解,让你对Fragment的理解更上一层楼!

    3795 人正在学习 去看看 CSDN讲师

1.场景就是在一个控制器中的view中有一个状态(未录入),点击未录入就会跳到签名界面,签名完成后,会dismiss关闭,这时候就要修改view的状态(已录入),view是自定义的,所以我想通知是最方便的,初始化的时候我创建控制器,但是view关掉,却不走移除控制器的方法。搜索一番资料得到下面两个方法。

//这个方法相当于vc中的viewDidLoad
- (void)didMoveToWindow {
    if (self.window) {
        //创建通知
        [[NSNotificationCenter defaultCenter] addObserver:self   selector:@selector(tongzhi:) name:@"signature" object:nil];
    }
}


//从当前window删除 相当于-viewDidUnload
- (void)willMoveToWindow:(UIWindow *)newWindow {
    if (newWindow == nil) {
//移除通知
        [[NSNotificationCenter defaultCenter] removeObserver:self name:@"tongzhi" object:nil];
    }
}

 

我把通知补充完整

//发送通知
 [[NSNotificationCenter defaultCenter] postNotificationName:@"signature" object:dic];





//接受通知内容
-(void)tongzhi:(NSNotification *)notification{
        NSDictionary *dic = notification.object;
       [_signBtn setTitle:dic[@"title"] forState:(UIControlStateNormal) ];
}

 

 

iOS移除兹视图

博文 来自: u011496891

移除通知

阅读数 796

没有更多推荐了,返回首页