雜記

基礎(chǔ)

  • 三目運算符

?:

NSString *test = @"test";
NSString *result = test?:@"fail";//result = @"test",當test為真時使用test值。

網(wǎng)絡(luò)相關(guān)

User Agent

User Agent中文名為用戶代理,簡稱 UA,它是一個特殊字符串頭,使得服務(wù)器能夠識別客戶使用的操作系統(tǒng)及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。

acceptableContentTypes

在網(wǎng)絡(luò)response中會有“content type”在響應(yīng)頭中,如圖:


responseHeader.png

content types用來標記網(wǎng)絡(luò)響應(yīng)的包的格式,此圖中數(shù)據(jù)為JSON格式,可以按照這種格式進行數(shù)據(jù)解析。
在AFNetworking中默認的使用”AFJSONResponseSerializer“對responseSerializer進行初始化。

self.responseSerializer = [AFJSONResponseSerializer serializer];

所以,默認可響應(yīng)的數(shù)據(jù)格式有3種“application/json", "text/json","text/javascript",如果想增加其他格式需要向acceptableContentTypes中添加即可。

+ (instancetype)OSCJsonManager
{

//AFN中所有的網(wǎng)絡(luò)請求都是由manager進行管理操作的。
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
 
//向acceptableContentTypes中增加"text/html"格式的響應(yīng)。
    manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

//設(shè)置UA
    [manager.requestSerializer setValue:[self generateUserAgent] forHTTPHeaderField:@"User-Agent"];

    return manager;
}

用戶基本信息的存儲使用的NSUserDefaults

NSUserDefaults 使用鍵值對將數(shù)據(jù)進行存儲。

NSUserDefualts *userDefaults = [NSUserDefaults standardUserDefaults];

[userDefaults setInteger:user.ID forKey:@"ID"];  //存儲ID
[userDefaults setObject:user.name forKey:@"name"];  //存儲name ,類型為NSString

user.ID = [userDefaults integerForKey:@"ID"];  //獲取int型
user.name = [userDefaults objectForKey:@"name"];  //獲取name ,類型為NSString

2016-11-17

坑1.網(wǎng)絡(luò)數(shù)據(jù)刷新如何處理如上下拉刷新數(shù)據(jù)

填坑:上下拉請求更新數(shù)據(jù)
使用第三方的<MJExtension.h>和<MJRefresh.h>進行數(shù)據(jù)請求處理代碼如下:

self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        //上拉數(shù)據(jù)請求
    }];
    self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
        //下拉數(shù)據(jù)請求
    }];

當頁面第一次顯示時在viewDidLoadviewWillAppear中進行網(wǎng)絡(luò)數(shù)據(jù)請求。

坑2.OSCObjsViewController中 refresh方法的調(diào)用
在此類的viewWillAppear中加入:NSLog(@"%@", [NSString stringWithUTF8String:object_getClassName(self)]); 查看一下繼承此類時會不會自動調(diào)用此方法。

在tableViewController中,拖動cell滾動時會不是調(diào)用scrollViewDidScroll方法?
會自動調(diào)用,無論是上拉還是下拉

通知

在視圖viewWillAppear:中添加一個Observer,在視圖退出時viewWillDisappear:移除觀察者。


- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];   
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dawnAndNightMode:) name:@"dawnAndNight" object:nil];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"dawnAndNight" object:nil];
}

泛型約束

__kindof

只允許本類或子類,相當于參數(shù)約束,如:
如說一個NSArray<UIView >,如果不加__kindof
,這個數(shù)組只能有UIView,即便是其子類也不行。而加了的話NSArray<__kindof UIView >,傳入UIView的子類也是可以的,如UIImageView,UIButton等UIIView的子類都適用。

__typeof

在新的寫法中已經(jīng)將__typeof替換成了typeof()

  • typeof()屬于一元操作符。類似于sizeof()
  • 可以根據(jù)typeof()括號里面的變量,自動識別變量類型并返回該類型。

typeof的使用

在iOS中的使用,常見運用于Block 。
下面看一個典型的用法:
__block typeof(self) bself = self;
[self methodBlock:^ {
[bself doSomething];
}
代碼解釋:定義一個和self相同數(shù)據(jù)類型的bself ,并賦值為self,在block中使用

神奇的宏

YYKit定義了以下2個宏

@weakify(self) & @strongify

// @weakify(self)
#define weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object;

//@strongify
#define strongify(object) autoreleasepool{} __typeof__(object) object = weak##_##object;

@weakify(self)展開后:__weak __typeof__(self) weak_self = self;進一步的剖析__typeof__(self)根據(jù)self的類型返所屬類,進一步簡化__weak CLASS weak_self = self;這就容易理解多了,相當于定義了一個弱引用類型的self。

@strongify(self)最中展開后CLASS self = weak_self; 將self變成了弱引用類型了。

@strongify一定于@weakify成對兒使用,一般多用于block中如下代碼:

 @weakify(self)
    [self doSomething^{
        @strongify(self)
        if (!self) return;
        ...
    }];

方法

respondsToSelector

判斷是否實現(xiàn)了某方法。

init

  • 在對某個視圖控制器進初始化時[xxxViewController alloc] init]方法時,會自動調(diào)用initWithNibName: bundle:方法。

2016-12-20

tableView cell高度

默認cell高度是44, 定高cell建議使用self.tableView.rowHeight = 88;,針對可變的cell高度可以在UITableViewDelegate中實現(xiàn):
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // return xxx}
需要注意的是,實現(xiàn)了這個方法后,rowHeight
的設(shè)置將無效。所以,這個方法適用于具有多種 cell 高度的 UITableView。

參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • cookie和緩存 Session是由應(yīng)用服務(wù)器維持的一個服務(wù)器端的存儲空間,用戶在連接服務(wù)器時,會由服務(wù)器生成一...
    縱我不往矣閱讀 471評論 0 1
  • Charles 模擬網(wǎng)絡(luò)狀態(tài) 在Charles的菜單上,選擇“Proxy” --> “Throttle Setti...
    永斷閻羅閱讀 368評論 0 3
  • 文檔對象模型DOM提供訪問和操作頁面內(nèi)容的方法和接口 瀏覽器對象模型BOM提供與瀏覽器交互的方法和接口 ECMAS...
    潔芬閱讀 337評論 0 0
  • 1.Block的特性和使用場景 Block 是一種閉包語法,將代碼像對象一樣傳遞,最重要的特性是,Block 可以...
    縉云饕餮閱讀 298評論 0 1
  • title: javascript雜記date: 2017-05-21 14:34:25tags: javascr...
    Gary23閱讀 417評論 0 0

友情鏈接更多精彩內(nèi)容