4.KVO,KVO,通知之objective-c

KVC

    

    [對象 setValueaValue forKeyaKey]//爲對象的aKey變量賦值

        aValue = [對象 valueForKeyaKey]//把對象的aKey變量的值取出來

    

    

    [對象 setValueaValue forKeyPathaKeyPath];//設置值

        id aValue = [對象 valueForKeyPathaKeyPath]//取值

        注意:keyPath裏邊的變量!aKeyPath p.name之類的(可以很多點)

    

    

    Demo

        

        Student *stu = [[Student alloc]init];

        [stu setValue:@"張三"forKey:@"name"];//對對象變量賦值

        NSString s1 = [stu valueForKey:@"name"];//變量值取出

        [stu release]

    

    

    

KVO

    

    1、註冊監聽

    

        [被監聽對象  addObserver監聽者 

         forKeyPath被監聽對象的屬性 

         options:監視內容(新值或舊值)

         context:額外信息]

    

    

    2、監聽者實現監聽方法(在監聽者的類裏面實現,不實現會崩潰)

    

        -(void)observerValueForKeyPath:(NSString*)keyPath ofObject:(id)object (被監聽對象) change(NSdictionary*)change(所監對象屬性變化) context:(void*)context

    

    

    3、監聽觸發條件

    

       被監聽對象的屬性發生變化時  //自動調用下面的方法 

    

    Demo:

        

            -voidobserverValueForKeyPath:(NSString*)keyPath  ofObject:(id)object change:(NSDictionary*)change context:(void*)context

        {

        NSLog:(@"keyPath:%@ object:%@ change:%@ context:%@ ",keyPath,object,change,context);  //可以在這方法裏實現想做的事 比如發送通知

        }

        

        Student *stu = [[Student alloc]init];

        stu.name = @"張三"

        stu addObserver self forKeyPath :@"name" options:NSKeyValueObservingOptionNew context:nil;

        stu.name = @"李四";  //值改變調用方法

        stu.name = @"王五"//值改變有調用方法

        stu release;

    

通知

        

    1、獲得通知中心對象

    

        NSNotificationCenter *center= [NSNotificationCenter defaultCenter];  //單例實際是獲得通知中心的地址

    

    

    2、監聽通知

    

        [center addObserver :監聽者 selector:須執行的方法 name:所監聽者通知的名稱 object:通知發送者];

    

    3、通知中心發佈消息

    

        [center PostNotificationName@"國王萬歲" object:某人]

    

    4.移除監聽中心

    

        [center removeObserver:self name:@"國王萬歲" object:某人];

    

    

    

    Demo:

    

        King *king = [[King alloc]init]

        Farmer *farmer = [[Farmer alloc]init]

        NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

        [center addObserver:farmer selector:@selector(test:) name:@"國王萬歲" object:king]

        [center postNotificationName:@"國王萬歲" object:king]

        [center removeObserver:farmer]

        [king release];

        [farmer release];

        

        -(void)test:(NSNotification*)n //方法必須實現 在監聽通知的類裏面 做想做的事

        {

           NSLog(@"name:%@ object:%@ userInfo:%@",[nname],[n object],[n userInfo]);

        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章