iOS12、iOS11、iOS10、iOS9常見適配

iOS12、iOS11、iOS10、iOS9常見適配

@(IOS各個版本適配)

[TOC]

一、iOS12(Xcode10)

1.1、升級Xcode10后項目報錯

不允許多個info.plist

Xcode10是默認選中的最新的New Build System(Default),在這個編譯系統的環境下,不允許多個info.plist

解決辦法一:(推薦)

build system切換到 Legacy Build System,換言之就是切換成老的編譯系統,就OK了。Xcode->File->Project Settings-> Build System -> Legacy Build System.

image

<figcaption style="display: block; text-align: center; font-size: 1rem; line-height: 1.6; color: rgb(144, 144, 144); margin-top: 2px;"></figcaption>

image

<figcaption style="display: block; text-align: center; font-size: 1rem; line-height: 1.6; color: rgb(144, 144, 144); margin-top: 2px;"></figcaption>

解決辦法二:

刪除其他info.plist文件。

iOS 12移除了libstdc++, 用libc++替代

Xcode10中libstdc++相關的3個庫(libstdc++、libstdc++.6、libstdc++6.0.9)應該都是被徹底廢棄了,如果你使用的三方庫中有依賴,請盡快和提供方溝通,告知他們遷移吧。如果自己開發使用,也盡快考慮遷移的事宜吧。

1.2、iPhone XR不支持3D-Touch

OC檢測代碼
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {

}
復制代碼
swift檢測代碼
self.traitCollection.forceTouchCapability == .availible
復制代碼

二、iOS11(Xcode9)

2.1、安全區域(SafeArea)

iOS11為UIViewControllerUIView增加了兩個新的屬性safeAreaInsetssafeAreaLayoutGuide

  • safeAreaInsets 適用于手動計算.
  • safeAreaLayoutGuide 適用于自動布局.
UIViewController中新增:
- (void)viewSafeAreaInsetsDidChange;
UIView中新增:
- (void)viewSafeAreaInsetsDidChange;
復制代碼

Storyboard使用Safe Area最低只支持iOS9iOS8的用戶就要放棄了

image

<figcaption style="display: block; text-align: center; font-size: 1rem; line-height: 1.6; color: rgb(144, 144, 144); margin-top: 2px;"></figcaption>

UIViewController調用- (void)viewDidLoad時它的所有子視圖的safeAreaInsets屬性都等于UIEdgeInsetsZero

viewSafeAreaInsetsDidChange的調用時機如下:

  • 1、viewDidLoad
  • 2、viewWillAppear
  • 3、viewSafeAreaInsetsDidChange
  • 4、viewWillLayoutSubviews
  • 5、viewDidAppear

只有在調用viewSafeAreaInsetsDidChange后,才能獲得view以及viewControllerSafeArea(UIEdgeInsets)。因此在viewDidload中根據SafeArea設置界面會有問題。

iPhone X:有導航欄的時候可以+44

豎屏 safeAreaInsets = (top = 44, left = 0, bottom = 34, right = 0)
橫屏 safeAreaInsets = (top = 0, left = 44, bottom = 21, right = 44)
#import "Adaptive11VC.h"
static inline UIEdgeInsets sgm_safeAreaInset(UIView *view) {
    if (@available(iOS 11.0, *)) {
        return view.safeAreaInsets;
    }
    return UIEdgeInsetsZero;
}

@interface Adaptive11VC ()
@end
@implementation Adaptive11VC
- (void)viewDidLoad {
    [super viewDidLoad];
}
- (void)testSafeArea {
    UIEdgeInsets safeAreaInsets = sgm_safeAreaInset(self.view);
    NSLog(@"safeAreaInsets = %@", NSStringFromUIEdgeInsets(safeAreaInsets));
}
- (void)viewSafeAreaInsetsDidChange {
    [super viewSafeAreaInsetsDidChange];
    [self testSafeArea];
}
@end
復制代碼

2.2、UIScrollView

iOS 11廢棄了UIViewControllerautomaticallyAdjustsScrollViewInsets屬性,新增了contentInsetAdjustmentBehavior屬性,所以當超出安全區域時系統自動調整了SafeAreaInsets,進而影響了adjustedContentInset,在iOS11中決定tableView內容與邊緣距離的是adjustedContentInset,所以需要設置UIScrollViewcontentInsetAdjustmentBehavior屬性。

// 方式一:(不推薦)修改額外的安全區域
if (@available(iOS 11.0, *)) {
    self.additionalSafeAreaInsets = UIEdgeInsetsMake(-44, 0, 0, 0);
}
else {
    // Fallback on earlier versions
}
// 方式二:(推薦)設置為不自動調整
if (@available(iOS 11.0, *)) {
    // 作用于指定的UIScrollView
    self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    // 作用與所有的UIScrollView
    UIScrollView.appearance.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
else {
    self.automaticallyAdjustsScrollViewInsets = NO;
}
復制代碼

2.3、tableview問題

iOS11開始UITableView開啟了自動估算行高estimatedRowHeight``estimatedSectionHeaderHeight estimatedSectionFooterHeight三個高度估算屬性由默認的0變成了UITableViewAutomaticDimension,如果不實現-tableView: viewForFooterInSection:-tableView: viewForHeaderInSection:,那么estimatedRowHeight estimatedSectionHeaderHeight estimatedSectionFooterHeight三個高度估算屬性由默認的0變成了UITableViewAutomaticDimension,導致高度計算不對,會產生空白。解決方法是實現對應方法或吧這三個屬性設為0。

2.4、LocalAuthentication 本地認證

本地認證框架提供了從具有指定安全策略(密碼或生物學特征)的用戶請求身份驗證的功能。例如,要求用戶僅使用Face ID或Touch ID進行身份驗證,可使用以下代碼:

#import <LocalAuthentication/LocalAuthentication.h>
/**
 檢測TouchID是否可用
 */
- (void)checkBiometrics {
    LAContext *context = [[LAContext alloc] init];
    BOOL success = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                                        error:nil];
    if ( success ) {
        NSLog(@"can use");
    }
    else {
        NSLog(@"can`t use ");
    }
}
/**
 在驗證TouchID可用的情況下使用
 */
- (void)excuteBiometrics {
    LAContext *context = [[LAContext alloc] init];
    context.localizedFallbackTitle = @"自定義標題";
    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
            localizedReason:@"為什么使用TouchID寫這里"
                      reply:^(BOOL success, NSError * _Nullable error) {
        if ( success ) {
            // 指紋驗證成功
        }
        else {
            switch (error.code) {
                case LAErrorUserFallback:{
                    NSLog(@"用戶選擇輸入密碼");
                    break;
                }
                case LAErrorAuthenticationFailed:{
                    NSLog(@"驗證失敗");
                    break;
                }
                case LAErrorUserCancel:{
                    NSLog(@"用戶取消");
                    break;
                }
                case LAErrorSystemCancel:{
                    NSLog(@"系統取消");
                    break;
                }
                // 以下三種情況如果提前檢測TouchID是否可用就不會出現
                case LAErrorPasscodeNotSet:{
                    break;
                }
                case LAErrorTouchIDNotAvailable:{
                    break;
                }
                case LAErrorTouchIDNotEnrolled:{
                    break;
                }
                default:
                    break;
            }
        }
    }];
}
復制代碼

2.5、啟動圖的適配

方法一:通過LaunchScreen.storyboard方式啟動

方法二:使用Assets中的LaunchImage

image

<figcaption style="display: block; text-align: center; font-size: 1rem; line-height: 1.6; color: rgb(144, 144, 144); margin-top: 2px;"></figcaption>

  • 給Brand Assets添加一張1125*2436大小的圖片
    • 打開Assets.xcassets文件夾,找到Brand Assets
    • 右鍵Show in Finder
    • 添加一張1125*2436大小的圖片
  • 修改Contents.json文件,添加如下內容
{
    "extent" : "full-screen",
    "idiom" : "iphone",
    "subtype" : "2436h",
    "filename" : "1125_2436.png",
    "minimum-system-version" : "11.0",
    "orientation" : "portrait",
    "scale" : "3x"
}
復制代碼

2.6、定位相關

在 iOS 11 中必須支持 When In Use 授權模式(NSLocationWhenInUseUsageDescription),在 iOS 11 中,為了避免開發者只提供請求 Always 授權模式這種情況,加入此限制,如果不提供When In Use 授權模式,那么 Always 相關授權模式也無法正常使用。

如果要支持老版本,即 iOS 11 以下系統版本,那么建議在 info.plist 中配置所有的 Key(即使 NSLocationAlwaysUsageDescription 在 iOS 11及以上版本不再使用):

NSLocationWhenInUseUsageDescription
NSLocationAlwaysAndWhenInUseUsageDescription
NSLocationAlwaysUsageDescription
NSLocationAlwaysAndWhenInUseUsageDescription  // 為 iOS 11 中新引入的一個 Key。
復制代碼

2.7、iOS11中 UIKit’s Bars 上的變化

三、iOS10(Xcode8)

3.1、(Why?Safe!)插件取消

Xcode8取消了三方插件(很多優秀的插件,本來可以顯著提高效率)的功能,使用Extension代替 Xcode 8 Extension 推薦

3.2、證書問題

為了方便用戶來管理,提供Automatically manage signing。需要輸入開發者賬號!如果沒有賬號也沒關系,在下面也可以選擇DebugRealeaseinHouse模式下對應的證書也可以!

3.3、隱私數據訪問問題

iOS10,蘋果加強了對隱私數據的保護,要對隱私數據權限做一個適配,iOS10調用相機,訪問通訊錄,訪問相冊等都要在info.plist中加入權限訪問描述,不然之前你們的項目涉及到這些權限的地方就會直接crash掉。


解決辦法: 只需要在info.plist添加NSContactsUsageDescriptionkey, value自己隨意填寫就可以,這里列舉出對應的key(Source Code模式下):

<key>NSPhotoLibraryUsageDescription</key><string>App需要您的同意,才能訪問相冊</string>

<key>NSCameraUsageDescription</key><string>App需要您的同意,才能訪問相機</string>

<key>NSMicrophoneUsageDescription</key><string>App需要您的同意,才能訪問麥克風</string>

<key>NSLocationUsageDescription</key><string>App需要您的同意,才能訪問位置</string>

<key>NSLocationWhenInUseUsageDescription</key><string>App需要您的同意,才能在使用期間訪問位置</string>

<key>NSLocationAlwaysUsageDescription</key><string>App需要您的同意,才能始終訪問位置</string>

<key>NSCalendarsUsageDescription</key><string>App需要您的同意,才能訪問日歷</string>

<key>NSRemindersUsageDescription</key><string>App需要您的同意,才能訪問提醒事項</string>

<key>NSMotionUsageDescription</key><string>App需要您的同意,才能訪問運動與健身</string>

<key>NSHealthUpdateUsageDescription</key><string>App需要您的同意,才能訪問健康更新 </string>

<key>NSHealthShareUsageDescription</key><string>App需要您的同意,才能訪問健康分享</string>

<key>NSBluetoothPeripheralUsageDescription</key><string>App需要您的同意,才能訪問藍牙</string>

<key>NSAppleMusicUsageDescription</key><string>App需要您的同意,才能訪問媒體資料庫</string>
復制代碼
隱私數據 對應key值
相冊 NSPhotoLibraryUsageDescription
相機 NSCameraUsageDescription
麥克風 NSMicrophoneUsageDescription
位置 NSLocationUsageDescription
在使用期間訪問位置 NSLocationWhenInUseUsageDescription
始終訪問位置 NSLocationAlwaysUsageDescription
日歷 NSCalendarsUsageDescription
提醒事項 NSRemindersUsageDescription
運動與健身 NSMotionUsageDescription
健康更新 NSHealthUpdateUsageDescription
健康分享 NSHealthShareUsageDescription
藍牙 NSBluetoothPeripheralUsageDescription
媒體資料庫 NSAppleMusicUsageDescription

3.4、跳轉到app內的隱私數據設置頁面

iOS 10 干掉了所有系統設置的 URL Scheme,這意味著你再也不可能直接跳轉到系統設置頁面(比如 WiFi、蜂窩數據、定位等)。

跳轉方式

方式一:prefs:root=某項服務 適用于 小于 iOS10的系統; NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"];


方式二:prefs:root=bundleID 適用于 大于等于iOS8系統,小于iOS10的系統 NSURL *url = [NSURL URLWithString:@"prefs:root=bundleID"];


方式三:UIApplicationOpenSettingsURLString 適用于 大于等于iOS8的系統 NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

// iOS系統版本 >= 10.0
{
    NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
}
return;
// iOS系統版本 >= 10.0
// But! 不建議這樣做哦,官方文檔中說過:
// `URL is now considered a private API and use will result in app rejection`.
// 雖然是有可能躲過蘋果的檢測,但是蘋果如果發現你這樣用了,app上架是有被拒的風險的.
{
    NSURL *url = [NSURL URLWithString:@"APP-Prefs:root=WIFI"];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        if (@available(iOS 10.0, *)) {
            [[UIApplication sharedApplication] openURL:url 
                                               options:@{} 
                                     completionHandler:nil];
        } else {
            // Fallback on earlier versions
        }
    }
}
// iOS系統版本 < 10.0
{
    NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
}
復制代碼

跳轉目的地

  • iOS系統版本 <= iOS7 , 只能跳轉到 系統設置頁面
  • iOS系統版本 >= iOS8 ,支持跳轉到第三方應用的設置界面中。使用prefs:root=bundleID ,bundleID是你第三方應用工程的唯一ID
  • iOS系統版本 >= iOS10,支持跳轉到自己應用設置,不支持跳轉到系統設置

3.5、字體變化

蘋果的默認字體會隨著iOS系統版本的不同而不同,iOS10中字體變大了。導致了原來的顯示有問題,會造成...的出現。暫時沒有好的解決辦法,需要自己在一個個適配一下!

3.6、UICollectionViewCell的的優化

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> 在iOS 10 之前,cell只能從重用隊列里面取出,再走一遍生命周期,并調用cellForItemAtIndexPath創建或者生成一個cell.

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> 在iOS 10 中,系統會cell保存一段時間,也就是說當用戶把cell滑出屏幕以后,如果又滑動回來,cell不用再走一遍生命周期了,只需要調用willDisplayCell方法就可以重新出現在屏幕中了.

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> iOS 10 中,系統是一個一個加載cell的,二以前是一行一行加載的,這樣就可以提升很多性能;

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> iOS 10 新增加的Pre-Fetching預加載

3.7、UIRefreshControl

在iOS 10 中, UIRefreshControl可以直接在UICollectionView和UITableView中使用,并且脫離了UITableViewController.現在RefreshControl是UIScrollView的一個屬性.

3.8、UserNotifications(用戶通知)

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> iOS 10所有相關通知被統一到了UserNotifications.framework框架中。增加了撤銷、更新、中途還可以修改通知的內容。通知不在是簡單的文本了,可以加入視頻、圖片,自定義通知的展示等等。

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> iOS 10相對之前的通知來說更加好用易于管理,并且進行了大規模優化,對于開發者來說是一件好事。

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> iOS 10開始對于權限問題進行了優化,申請權限就比較簡單了(本地與遠程通知集成在一個方法中)。

四、iOS9(Xcode7)

4.1、Bitcode

Xcode7 默認啟用 Bitcode,但是如果我們用到的第三方庫編譯時還沒啟用 Bitcode,主工程就會編譯不過。Bitcode 是蘋果 App Thinning 的機制之一,可以減少安裝包的大小。App store 會將這個 Bitcode 編譯為可執行的64位或32位程序。

解決辦法一: 最簡單的解決辦法是先把 Bitcode 關掉:把 Build settings - Build Options - Enable Bitcode 改為 NO。

image

<figcaption style="display: block; text-align: center; font-size: 1rem; line-height: 1.6; color: rgb(144, 144, 144); margin-top: 2px;"></figcaption>

解決辦法二: 移除不支持BitCode的平臺SDK,或者尋找支持BitCode的替代品,或者聯系SDK方支持BitCode。

4.2、HTTP 請求失敗

iOS9 默認不支持 HTTP 請求,需要改用更安全的 HTTPS(默認用 TLS 1.2)。蘋果還提供了配置,使得所有安全性更低的網絡請求也能使用,解決方案就是在 info.plist 里面增加以下配置:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
復制代碼

如果復雜一些,還可以指定白名單域名,聲明所支持 TLS 的最低版本。另外需要注意的是,即使寫了上述配置,在 HTTPS 頁面中,HTTP 的 javascript 或 css 不會被加載,因為蘋果認為這降低了頁面的安全性。

4.3、canOpenUrl 限制

canOpenUrl 可以用來判斷用戶是否安裝了某個 APP。也許是出于用戶隱私的考慮,iOS9 上對 canOpenUrl 做了限制,最多只能對 50 個 scheme 做判斷。如果是用 Xcode7 編譯,需要在 plist 里面聲明這些 scheme,沒有聲明的會直接返回 NO:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>weixin</string>
    <string>wechat</string>
</array>
復制代碼

4.4、UIStatusBar的問題

iOS9中廢棄的方法

// 修改狀態欄的樣式為白色
// 'setStatusBarStyle(_:animated:)' was deprecated in iOS 9.0: Use -[UIViewController preferredStatusBarStyle]
UIApplication.shared.setStatusBarStyle(.lightContent, animated: true)
// 隱藏狀態欄
// 'setStatusBarHidden(_:with:)' was deprecated in iOS 9.0: Use -[UIViewController prefersStatusBarHidden]
UIApplication.shared.setStatusBarHidden(true, with: .fade)
復制代碼

用下面兩個方法替換

-[UIViewController preferredStatusBarstyle]
-[UIViewController preferredStatusBarHidden]
復制代碼

參考資料:

iOS12適配

iOS12AdaptationTips

關于iPhone X 的適配

iOS11適配iPhoneX總結

iOS 10 適配知識點總結

聊聊iOS 10更新以后跳轉系統設置的幾種方式

iOS 10 調用系統"設置"里的功能(全)

iOS TouchID驗證和Keychain結合使用

iOS10AdaptationTips

適配iOS9

微信 iOS 9 適配總結

iOS9AdaptationTips

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,283評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,947評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,094評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,485評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,268評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,817評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,906評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,039評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,551評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,502評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,662評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,188評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,907評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,304評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,563評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,255評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,637評論 2 370

推薦閱讀更多精彩內容

  • 深度網絡的退化問題 網絡的深度對模型的性能至關重要,當增加網絡層數后,網絡就可以進行提取更復雜的特征,所以當模型更...
    zidea閱讀 981評論 0 3
  • 早上經過洗漱后,我們來到操場上集合。 狼牙教官先讓我們軍姿端正,再跟我們說:“今天我們來學習拍拍操。他自己演了...
    吳旭輝閱讀 174評論 0 0
  • 和醫生約的今天拔牙 其實對拔牙一直有心理陰影,一直怕去 可是智齒不拔么,時不時痛一下,而且它太大 臉都變寬了。一直...
    HOHO_ec7b閱讀 149評論 0 0
  • 剛抄寫了一個半小時,真好; 晚上在公司呆到十點多才走,慢下來處理一些事,靜下來思考,真好。
    恒心者閱讀 174評論 1 1