亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

以實例講解Objective-C中的KVO與KVC機制

2019-11-26 14:59:52
字體:
來源:轉載
供稿:網友

KVO實例淺析

最近遇到個問題,在處理項目中一個評論界面時,因為直接用的是UIWebView展示評論列表,結果取到的頁面上下都有一段CGSize為(320,65)的亂七八糟的廣告,十分礙眼.頭部廣告因很方便的在頭部坐標貼上自己的logo解決了,但是尾部的,因為每個頁面的評論長短不一,坐標也就不一樣,這樣就不能給定死坐標去貼logo,思前想后,通過KVO很好的解決了這個問題.
@KVO概述:
KVO,即:Key-Value Observing,它提供一種機制,當指定的對象的屬性被修改后,則對象就會接受到通知。
簡單的說就是每次指定的被觀察的對象的屬性被修改后,KVO就會自動通知相應的觀察者了。

使用步驟如下:
1. 注冊,指定被觀察者的屬性,
2. 實現回調方法
3. 觸發回調方法  
4. 移除觀察

代碼實例:

復制代碼 代碼如下:

-(void)viewDidLoad{ 
 
    // KVO,作為一個觀察者,只要屬性"contentSize"發生變化,回調方法里面就會通知 
    [_webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:NULL]; 

 
//  回調方法 
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(voidvoid *)context 

    if(object == _webView.scrollView && [keyPath isEqualToString:@"contentSize"]) 
    { 
        //  得到最大的Y坐標 
        CGSize size = _webView.scrollView.contentSize; 
       
        if (size.height > 568.0) { 
             
            // 遮擋廣告 
            _hideBottomImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, size.height-67, ScreenWidth, 67)]; 
            _hideBottomImage.image = [UIImage imageNamed:@"banner"]; 
            [_webView.scrollView addSubview:_hideBottomImage]; 
            [_hideBottomImage release]; 
        } 
    } 
    else 
    { 
        //  調用父類的方法 
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; 
    } 

 
- (void)dealloc{//---->在ARC環境下也能調用dealloc方法,只是不需要寫[super dealloc] 
 
    // 移除KVO,否則會引起資源泄露  
    [_webView.scrollView removeObserver:self forKeyPath:@"contentSize"]; 
    [super dealloc];   
 

上面是針對contentSize屬性,其他屬性依此類推

KVC
通常,我們都是通過屬性的set和get方法來賦值和取值,這里介紹用Key-Value-Coding(KVC)鍵值編碼來給類的屬性賦值和取值.
1.基本方式(setValue:forKey:      valueForKey)

復制代碼 代碼如下:

//  ---定義一個Student類(.m文件無任何操作) 
#import <Foundation/Foundation.h> 
 
 
@class HMTClass; 
@interface HMTStudent : NSObject{ 
 
    NSString * _name; 
    
    BOOL _test; 
    BOOL _isTest; 
    BOOL test; 
    BOOL isTest; 
 

 
@property (nonatomic,copy)NSString * name; 
@property (nonatomic,copy)NSString * sex; 
@property (nonatomic,assign)NSInteger age; 
@property (nonatomic,strong) HMTClass * hmtClass; 
 
@end 
 
//  ---main文件 
HMTStudent * student = [[HMTStudent alloc] init]; 
     
student.hmtClass = [[HMTClass alloc] init]; 
student.name = @"humingtao”;     //  set方法賦值
   
//  KVC賦值    
[student setValue:@“mawei is dog" forKey:@"name”];  
[student setValue:@"m" forKey:@"sex"]; 
[student setValue:@(10) forKey:@"age"]; 
//  取值     
NSLog(@"%s__%d__|%@",__FUNCTION__,__LINE__,[student valueForKey:@"name"]); 
 
特別注意: 
   我在類里面還定義了4個BOOL值變量,用來驗證KVC訪問屬性鍵順序 
       [student setValue:@(YES) forKey:@"test”]; 
 
       結果是:_test―>_isTest―>test―>isTest 

2.鍵路徑訪問(用于一個類中屬性的屬性 setValue:ForKeyPath: forKeyPath)

復制代碼 代碼如下:

//  創建一個班級類 
@interface HMTClass : NSObject 
 
@property (nonatomic,copy)NSString * name; 
 
@end 
 
然后前面第一點中在Student類中寫了一個班級屬性hmtClass 
復制代碼 代碼如下:
 
HMTClass *hmtClass = [[HMTClass alloc]init]; 
[hmtClass setValue:@"宇宙一班" forKey:@"name"]; 
[student setValue:hmtClass forKey:@"hmtClass"]; 
NSString *hmtClassName = [student valueForKeyPath:@"hmtClass.name"]; 
 
//也可以這樣存值 
[student setValue:@"宇宙一班" forKeyPath:@"hmtClass.name"]; 
student.hmtClass.name = [student valueForKeyPath:@"hmtClass.name"]; 

3.自動封裝基本數據類型
我們在Student類中添加分數屬性 NSInteger number 學號;
復制代碼 代碼如下:

#import <Foundation/Foundation.h>   
@class HMTClass;   
@interface HMTStudent : NSObject   
{   
    NSString *_name;   
 
    NSInteger number;   
}   
@end   
 
[student setValue:@"100" forKeyPath:@"number"];   
NSString *number = [student valueForKey:@"number"];   

可見用NSString*類型設置的屬性值@"100",而我們的屬性是NSInteger類型的,存取都沒有問題。 

4.操作集合
在Student類中加入數組NSArray,用來表示其他的學生。

復制代碼 代碼如下:

#import <Foundation/Foundation.h>   
@class HMTClass;   
@interface HMTStudent : NSObject   
{   
    NSArray *manyStudents;   
}   
@end   
           
Student *student1 = [[HMTStudent alloc]init];   
Student *student2 = [[HMTStudent alloc]init];   
Student *student3 = [[HMTStudent alloc]init];   
[student1 setValue:@"200" forKey:@"number"];   
[student2 setValue:@"300" forKey:@"number"];   
[student3 setValue:@"400" forKey:@"number"];   
NSArray *array = [NSArray arrayWithObjects:student1,student2,student3,nil];   
[student setValue:array forKey:@"manyStudents"];   
NSLog(@"%@",[student valueForKeyPath:@"manyStudents.number"]);  

打印出來是數組(200,300,400) 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品wwwwww| 国模精品视频一区二区三区| 色偷偷888欧美精品久久久| 国产精品扒开腿爽爽爽视频| 国产成人av在线播放| 亚洲欧美日韩国产精品| 国产免费一区视频观看免费| 中文字幕日韩精品在线| 国内精品国产三级国产在线专| 欧美另类交人妖| 色多多国产成人永久免费网站| 亚洲欧美成人在线| 精品亚洲va在线va天堂资源站| 精品一区精品二区| 国产精品久久久久影院日本| 久久久影视精品| 欧美壮男野外gaytube| 成人免费激情视频| 青青草成人在线| 国产精品99久久久久久白浆小说| 中文字幕精品影院| 久久精品99国产精品酒店日本| 亚洲精品欧美一区二区三区| 亚洲国产精品福利| 欧美激情亚洲一区| 日韩精品视频在线免费观看| 97在线视频国产| 欧美日韩亚洲视频| 亚洲免费视频网站| 国产女同一区二区| 久久免费视频观看| 美女视频久久黄| 91视频国产一区| 日本三级韩国三级久久| 一本色道久久88综合日韩精品| 国产玖玖精品视频| 欧美性色视频在线| 欧美激情久久久久久| 日韩性xxxx爱| 日韩欧美主播在线| 亚洲国产精品美女| 久久精品人人做人人爽| 国产精品成人av性教育| 亚洲精品国产精品久久清纯直播| 一本一道久久a久久精品逆3p| 亚洲乱码av中文一区二区| 亚洲日韩欧美视频| 久久色在线播放| 久久精品小视频| 揄拍成人国产精品视频| 国产在线播放不卡| 亚洲欧洲一区二区三区在线观看| 992tv成人免费影院| 国产中文日韩欧美| 国产欧美精品一区二区三区介绍| 亚洲人成电影网站色www| 国产精品自拍小视频| 亚洲精品在线不卡| 国产精品吊钟奶在线| 国产欧美精品日韩| 国产精品久久久久久久9999| 欧美大片免费观看| 国产精品三级在线| xx视频.9999.com| 久久久久亚洲精品成人网小说| 欧美成人在线免费视频| 日本高清视频一区| 理论片在线不卡免费观看| 成人精品一区二区三区电影黑人| 久久视频在线免费观看| 两个人的视频www国产精品| 色综合导航网站| 国产一区二区黄| 日韩在线观看av| 自拍亚洲一区欧美另类| 久久天堂电影网| 最近免费中文字幕视频2019| 精品综合久久久久久97| 日韩一区二区三区在线播放| 日韩天堂在线视频| 中文字幕亚洲在线| 91精品国产高清自在线看超| 欧美激情精品久久久久久黑人| 国产精品久久久久久久久影视| 国产精品永久在线| 91沈先生在线观看| 一区二区三区美女xx视频| 亚洲欧美激情四射在线日| 国产精品2018| 欧美激情欧美狂野欧美精品| 国产精品欧美日韩一区二区| 国产一区二区三区三区在线观看| 欧美又大又硬又粗bbbbb| 国产精品国产三级国产aⅴ浪潮| 亚洲变态欧美另类捆绑| 久久手机免费视频| 精品亚洲一区二区| 亚洲深夜福利网站| 91精品久久久久久久久| 亚洲精品国产电影| 中国china体内裑精亚洲片| 国产精品久久久久国产a级| 欧美性猛交xxxx乱大交蜜桃| 国产精品中文字幕久久久| 久久久精品影院| 久久久久久久国产精品| 伊人男人综合视频网| 精品久久久久久久久久国产| 亚洲女人被黑人巨大进入| 欧美成人免费观看| 538国产精品一区二区免费视频| 成人字幕网zmw| 91系列在线观看| 国产精品av网站| 欧洲成人在线视频| 国产精品视频精品视频| 亚洲四色影视在线观看| 精品精品国产国产自在线| www.久久久久| 亚洲理论在线a中文字幕| 粗暴蹂躏中文一区二区三区| 欧美巨乳在线观看| 青青草国产精品一区二区| 久久人人爽人人爽人人片av高请| 久久人人爽人人爽爽久久| 国产精品美女无圣光视频| 亚洲三级黄色在线观看| 日韩在线免费视频| 亚洲国产成人久久综合一区| www.日韩系列| 国产精品高潮视频| 中文字幕日韩欧美在线视频| 青草成人免费视频| 欧美在线一区二区三区四| 亚洲精品日韩丝袜精品| 国产视频999| 亚洲男人天堂网站| 成人做爽爽免费视频| 欧美激情高清视频| 久久久国产精品一区| 91精品视频专区| 正在播放亚洲1区| 久久久久久久91| 国产在线视频一区| 久久琪琪电影院| 欧美亚洲另类视频| 色偷偷噜噜噜亚洲男人的天堂| 亚洲国产精品久久久久秋霞蜜臀| 国产视频久久久久久久| 日韩在线不卡视频| 欧美日韩国产在线播放| 亚洲 日韩 国产第一| 欧美专区福利在线| 亚洲全黄一级网站| 欧美在线性视频| 日韩影视在线观看| 亚洲性生活视频在线观看| 国产成人精品免费久久久久| 狠狠躁天天躁日日躁欧美| www.99久久热国产日韩欧美.com| 92国产精品久久久久首页| 欧美日韩亚洲系列| 国产精品99久久99久久久二8| 欧美成人精品三级在线观看|