UI入門指引

来源:http://www.cnblogs.com/ljcgood66/archive/2016/04/06/5357724.html
-Advertisement-
Play Games

1. iOS學習路線: C語言:數據類型、流程式控制制、函數、指針、字元串、結構體、枚舉、預處理; OC:面向對象、記憶體管理、分類、協議、Block、KVC/KVO、Foundation框架; iOS基礎: UIKit框架:基礎視圖:UIButton,UILabel,UITextField,UIImag ...


1. iOS學習路線:

C語言:數據類型、流程式控制制、函數、指針、字元串、結構體、枚舉、預處理;

OC:面向對象、記憶體管理、分類、協議、Block、KVC/KVO、Foundation框架;

iOS基礎: 

UIKit框架:基礎視圖:UIButton,UILabel,UITextField,UIImageView,UIScrollView等;

高級視圖:UITableView,UIPickerView, IB的使用等

自定義視圖;

控制器: UINavigationController, UITabBarController, 自定義視圖控制器

觸摸事件

手勢

鍵盤處理

MVC模式、代理設計模式

通知機制

iOS高級:

數據存取:plist, 歸檔,SQLite等

多線程編程:GCD, NSOperationQueue, NSThread

網路:NSURLConnection,AFNetworking, CFNetworking

多媒體:音頻、視頻、相機、相冊、流媒體

系統服務:推送、iCloud、內購、廣告、藍牙、打電話、發簡訊、通訊錄,郵件

真機調試,發佈

熱門技術:二維碼、加密、支付、XMPP即時通訊

2.iOS開發一般需要哪些內容

開發人員開發完應用程式後,需要把應用上傳到App Store(蘋果的應用商店),蘋果審核後顯示在商店中,用戶從App Store中下載APP

3. UI

User Interface用戶介面,用戶通過UI和程式交互,提交請求,顯示界面和結果。

可以這樣理解,在iOS程式中,看得見的部分就是UI。類似於我們Mac機器的鍵盤、顯示器、觸摸板等

 

為了方便開發者開發出強大的功能,蘋果提供了各種各樣的框架

UIKit - 創建和管理應用程式的用戶界面

QuartzCore -提供動畫特效以及通過硬體進行渲染的能力

CoreGraphics -提供2D繪製的基於C的API

CoreLocation -使用GPS和WIFI獲取位置信息

MapKit -為應用程式提供內嵌地圖的介面

AVFoundation – 音頻處理

 

4. UIKit框架

UIKit框架中提供了很多可視化的組件元素,我們利用UIKit框架提供的各種組件對象組合成美觀的UI界面

 

需要提醒大家沒必要一次性全部掌握所有控制項的使用,也沒必要掌握某個控制項的所有用法。iOS控制項的用法都是相似的,先掌握最主要、最常用的控制項,其他控制項用時再學

 

5. 分析界面中的控制項

 

 

6. 第一個iOS程式

6.1 開發步驟

搭建UI界面,1個按鈕,2個文本框,3個標簽

監聽按鈕的點擊事件

獲取2個文本框的值,將最後結果顯示出來

 

6.2 創建工程實現

 

7.  Xcode佈局

7.1  菜單欄

7.2 工具欄:啟動、停止, 顯示與隱藏邊欄

7.3 導航區(Cmd+0):

Project Navigator(Cmd+1),管理當前工程的文件

Symbol Navigator,管理當前工程的類、屬性和方法

Find Navigator,搜索

Issue Navigator, 問題導航

Test Navigator, 測試導航

Debug Navigator, 調試導航,會顯示記憶體、CPU的占用情況

BreakPoint Navigator,顯示所有斷點,能夠快速跳轉到斷點

Report Navigator,  日誌導航,會顯示當前項目的運行、調試等信息

 

7.4 編輯區

主要操作區域

7.5 實用工具區

7.5.1 對象相關屬性區

選中某個對象後,在該區域顯示當前對象的相關屬性

7.5.2 庫區

文件模板庫,代碼片段庫,對象庫和媒體庫

7.6 調試區

一般分為變數區和控制台兩個區域

 

8. 從main函數到AppDelegate

Supporting Files 中有main函數,在main函數中,僅僅是調用了UIApplicationMain函數.

UIApplicationMain 前兩個參數為main函數的參數(可以通過edit Schema,設置main的參數);

第三個參數指定當前應用程式的類名,如果為nil,當前項目會創建一個UIApplication類的對象,也可以傳遞一個UIApplication子類,當前main函數就是根據第三個參數創建應用程式;一個UIApplication對象就代表一個應用程式;一個iOS程式啟動後創建的第一個對象就是UIApplication對象;UIApplication對象是一個單例對象,可以通過[UIApplication sharedApplication]來獲得當前應用程式;UIApplication的一個主要工作就是處理用戶事件,它會是一個隊列,對用戶的操作逐個處理;UIApplication還維護一個在當前應用中打開的Window列表;UIApplication一般會被賦予一個代理對象(第4個參數),以處理應用程式生命周期事件,如程式的啟動、關閉、進入後臺、進入前臺等。

第四個參數為當前應用程式的代理類,main函數根據當前代理類創建一個delegate對象,並將該delegate對象賦值給UIApplication對象的delegate屬性。該代理類是一個遵從UIApplicationDelegate 應用程式代理協議的類,當應用發生一些系統級的事件時就會通知代理進行處理。如當來電或鎖屏時會導致APP進入後臺或終止,在APP受到類似干擾時,會產生一些系統事件,這時UIApplication會通知它的delegate對象,讓代理來處理這些系統事件。

  // 當應用程式啟動完畢後系統會自動調用

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    return YES;

}

    // 當來電話或簡訊,或者用戶退出應用程式時,應用從活動狀態轉入非活動狀態時調用,在該方法中暫停正在執行的任務,使時鐘無效,或暫停游戲

- (void)applicationWillResignActive:(UIApplication *)application {

    

}

// 當應用進入後臺時調用,可以在該方法中保存用戶數據,釋放占用的資源,作廢時鐘,保存足夠的程式狀態以便應用重啟時能夠恢復到當前狀態。需要註意的是當用戶退出時,會調用這個方法,而不是applicationWillTerminate:方法

- (void)applicationDidEnterBackground:(UIApplication *)application {

 

}

    // 當應用從後臺即將變為前臺時調用,一般在該方法中恢復應用進入後臺時保存的狀態

- (void)applicationWillEnterForeground:(UIApplication *)application {

 

}

    // 當應用變為活動狀態時調用,在該方法中啟動在不活動狀態中暫停的任務,如果應用之前已經進入後臺,可能需要刷新用戶界面

- (void)applicationDidBecomeActive:(UIApplication *)application {

   

}

    // 當結束應用程式時調用該方法,如果合適可以保存數據,如果程式已經進入後臺後,該方法不會再被調用。可以設置Info.plist文件,修改Application does not run in background屬性設置為Yes後,程式將不再進入後臺運行

- (void)applicationWillTerminate:(UIApplication *)application {

 

}

    // 可選方法,當系統記憶體緊張時,嘗試釋放當前應用的一些記憶體,如果記憶體還不足,應用則終止

-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application{

    

}

 

9.程式的啟動過程

在main函數中調用UIApplicationMain函數;

創建UIApplication對象,創建UIApplication的delegate對象;

開啟一個事件迴圈(Main Runloop)監聽系統級的事件;

如果沒有storyboard故事板,程式啟動完畢後就會調用AppDelegate中的- (BOOL)application:  didFinishLaunchingWithOptions: 方法,在該方法中創建UIWindow對象,創建和設置UIWindow的rootViewController根視圖控制器,顯示視窗;參考代碼:

self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];

    ViewController *vc = [[ViewController alloc]init];

    self.window.rootViewController = vc;

    

    [self.window makeKeyAndVisible];

 

如果有storyboard故事板的話,會根據Info.plist獲得Main.storyboard,載入該故事板,創建UIWindow,設置UIWindow的rootViewController根視圖控制器,顯示視窗。

 

10 工程文件

AppDelegate.h和AppDelegate.m文件,應用的代理文件;

ViewController.h和ViewController.m文件,視圖控制器,主要在視圖控制器中編寫邏輯代碼;

Main.storyboard故事板,預設程式的啟動界面,可以在該視圖中添加控制項,預設情況下,該視圖的控制器為ViewController;預設啟動Main.storyboard故事板,可以在Info.plist文件中重新設置主故事板的名稱。在Main.storyboard中的View Controller(視圖控制器)的左側有一個箭頭,表示該控制器是Initial View Controller。

Assets.xcassets是一個圖片文件夾,用來存儲項目圖片,綠色文件夾表示真實存在的文件夾,黃色文件夾表示邏輯文件夾,便於在當前項目中管理相應的文件,不是真實存在的;

LaunchScreen.storyboard,是程式啟動完成前的一個載入界面;

Info.plist是當前項目的相關信息;

Supporting Files邏輯文件夾,main函數在該文件夾中;

Products文件夾,保存生成的app

 

11 創建空工程

應用也可以不從Main.storyboard啟動。可以刪除掉Main.storyboard故事板,選中工程,在General選項卡中找到Main Interface列表框,刪除Main。

打開AppDelegate.m文件,在文件頂部導入頭文件

#import "ViewController.h”,

修改- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];

    ViewController *vc = [[ViewController alloc]init];

    self.window.rootViewController = vc;

    

    [self.window makeKeyAndVisible];

return YES;

}

 

12. 設置控制項的屬性

12.1 直接在Attributes Inspector面板中設置

12.2在代碼中設置

設置字體:lbl.font = [UIFont boldSystemFontOfSize:24];

    NSLog(@"%@", [UIFont familyNames]);在控制臺中輸出支持的所有字體

設置文本顏色:    lbl.textColor = [UIColor redColor];

設置文本的對齊方式:    lbl.textAlignment = NSTextAlignmentRight;

字體自適應標簽的寬度:    lbl.adjustsFontSizeToFitWidth = YES; 需要註意的是不能自適應高度

UILabel的換行,先設置最多顯示的行數:    lbl.numberOfLines = 3;

如果文字不夠,實際上是幾行就是幾行;如果行高不夠,能顯示幾行就是幾行;如果行數設置為0,表示沒有行數限制。

    然後設置換行中斷模式:lbl.lineBreakMode = NSLineBreakByWordWrapping;

需要註意的是,在新版本的iOS中,ByWordWrapping、ByCharWrapping和ByClipping效果可能是一樣的,顯示不完全時,截斷後面的字元;

設置tag標記,是一個正整數:    lbl.tag = 123;可以通過tag標記快速訪問控制項如:  (UILabel *)  [self.view viewWithTag:123],

設置陰影的顏色和偏移:    lbl.shadowColor = [UIColor yellowColor];

    lbl.shadowOffset = CGSizeMake(2, 2);

設置透明度: lbl.alpha = 0.8;

 

13 現有iOS設備的坐標系

13.1 iPhone設備的大小

普通屏1點==1像素,Retina屏,1點==2像素,6+ ,1點==3像素

4s: 3.5寸, 320*480點, 640*960像素

5s: 4寸, 320*568點, 640*1136像素

6 4.7寸, 375*667點, 750*1334像素

6+: 5.5寸, 414*736點, 1242*2208像素,蘋果會自動縮放到1080*2208像素

在準備APP所需要的圖片時,需要準備三張相同的圖,如:test.png(100*100)、[email protected](200*200)、[email protected](300*300),系統會根據當前設備自動選擇相應的圖片

 

13.2 frame和bounds

(1). frame 與 bounds的區別

-(CGRect)frame{

return CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height);

}

-(CGRect)bounds{

    return CGRectMake(0,0, self.frame.size.width,self.frame.size.height);

}

bounds的原點是(0,0)點(就是view本身的坐標系統,預設永遠都是0,0點),而frame的原點卻是任意的(相對於父視圖中的坐標位置)。

 

 

        frame: 該view在父view坐標系統中的位置和大小。(參照點是父view的坐標系統)

        bounds:該view在本地坐標系統中的位置和大小。(參照點是本地坐標系統,就相當於ViewB自己的坐標系統,以0,0點為起點)

        center:該view的中心點在父view坐標系統中的位置和大小。(參照電是父視圖的坐標系統)

每個view都有一個本地坐標系統。這個坐標系統作用比較重要,比如觸摸的回調函數中的UITouch裡面的>坐標值都是參照這個本地坐標系統的坐標。當然bounds這個屬性也是參照這個本地坐標系統來的。其實本地坐標系統的關鍵就是要知道的它的原點(0,0)在什麼位置(這個位置又是相對於上層的view的本地坐標系統而言的,當然最上面的一層view就是 window它的本地坐標系統原點就是屏幕的左上角了)。通過修改view的bounds屬性可以修改本地坐標系統的原點位置。

 

例:

UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 280, 250)];  

 

[view1 setBounds:CGRectMake(-20, -20, 280, 250)];  

//設置了bounds後,view1左上角的坐標相當於原點的位置是-20,-20

view1.backgroundColor = [UIColor redColor];  

[self.view addSubview:view1];//添加到self.view  

NSLog(@"view1 frame:%@========view1 bounds:%@",NSStringFromCGRect(view1.frame),NSStringFromCGRect(view1.bounds));  

 

UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];  

view2.backgroundColor = [UIColor yellowColor];  

[view1 addSubview:view2];//添加到view1上,[此時view1坐標系左上角起點為(-20,-20)]  

NSLog(@"view2 frame:%@========view2 bounds:%@",NSStringFromCGRect(view2.frame),NSStringFromCGRect(view2.bounds)); 

 

 

13.3 給控制項重新設置大小及位置

CGRect newFrame = CGRectMake(100, 200, 200, 50);

    lbl.frame = newFrame;

不能這樣直接設置

lbl.frame.origin.x = 200; //error

  

14. UIButton

按鈕,可以對應用的點擊作出響應。繼承自UIControl,間接繼承自UIView。

14.1 通過滑鼠從對象庫中把按鈕拖曳到視圖中

 

14.2 通過代碼添加

    UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 40)];

    btn.backgroundColor = [UIColor cyanColor];

    [btn setTitle:@"button" forState:UIControlStateNormal];

    [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

    [self.view addSubview:btn];

上面代碼實現了設置背景色、設置標題、設置標題顏色.

這兒用到一個狀態,按鈕常用 的狀態包括正常狀態、高亮狀態、選中狀態和禁用狀態。如果沒有設置高亮狀態的標題,預設和正常狀態標題一樣。

設置按鈕的選中狀態:btn.selected = YES;

設置禁用狀態:btn.enabled = NO;

設置字體:    btn.titleLabel.font = [UIFont boldSystemFontOfSize:28];

設置圖片:[btn setImage:[UIImage imageNamed:@"navigationbar_arrow_up"] forState:UIControlStateNormal]; 如果圖片較小,預設情況下圖片在左側,文字在右側。

設置按鈕的背景圖片:[btn setBackgroundImage:[UIImage imageNamed:@"navigationbar_arrow_up"] forState:UIControlStateNormal];

 

14.3 系統預設樣式按鈕

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];

    btn.frame = CGRectMake(100, 100, 200, 200);

    btn.backgroundColor = [UIColor redColor];

    btn.center = CGPointMake(100, 100);

現在很多系統樣式按鈕已經失效,不建議使用系統button

 

14.4 添加事件

14.4.1 在故事板中,通過滑鼠拖曳添加動作

14.4.2 通過代碼添加

    [btn addTarget:self action:@selector(buttonClicked ) forControlEvents:UIControlEventTouchUpInside];

第一個參數是接收事件的對象;第二個參數是接收到事件後需要進行的動作;第三個參數是接收什麼類型的事件。當運行APP後,單擊這個按鈕,就會觸發UIControlEventTouchUpInside事件,系統收到該事件後,就會交給當前對象self(ViewController視圖控制器)響應這個事件,然後會跳轉到buttonClicked方法中執行。

 

在ViewDidLoad方法的下麵添加一個方法:

-(void)buttonClicked{

    self.view.backgroundColor = [UIColor lightGrayColor];

}

 

14.4.3 帶參數的事件響應程式

(1). 添加動作時,可以指定參數,一般是當前按鈕本身

 

(2). 在添加事件時,可以在響應消息後添加一個冒號,如:

[btn addTarget:self action:@selector(buttonClicked: ) forControlEvents:UIControlEventTouchUpInside];

相應的響應方法修改為:

- (void)buttonClicked:(UIButton *)button{

    self.view.backgroundColor = [UIColor lightGrayColor];

    // 在方法中可以通過button來訪問當前響應事件的按鈕

    [button setTitle:@"被點了" forState:UIControlStateNormal];

}

 

15. 時鐘NSTimer

15.1 創建NSTimer對象

Timer可以等待一定的時間間隔,然後給目標對象發送一條指定的消息。如創建一個時鐘對象,給window發送一條消息,告訴window在指定間隔後更新。

NSTimer和run loops運行迴圈一起工作。

 

    /**

     *  創建一個時鐘對象,該對象會立即加入到運行迴圈中

     *  

     *  第一個參數是時間間隔

     *  第二個參數響應對象

     *  第三個參數是響應方法

     *  第四個參數是傳遞用戶信息

     *  第五個參數是否允許每隔指定的時間間隔就發送一次消息

     *

     *  @return 返回一個時鐘對象

     */

NSTimer _timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(moveLabel) userInfo:nil repeats:YES];

 

也可以先創建時鐘,再手動把時鐘添加到運行迴圈中,如:

NSTimer  _timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(moveLabel) userInfo:nil repeats:YES];

    [[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];

 

15.2 實例

(1). 創建一個SingleView Application

(2).  在ViewController的類擴展中添加一個NSTimer成員變數

@interface ViewController (){

    NSTimer *_timer;        // 聲明一個成員變數

}

@end

(3). 在viewDidLoad方法中,創建一個按鈕,創建一個標簽,初始化NSTimer成員變數

- (void)viewDidLoad {

    [super viewDidLoad];

    // 創建一個按鈕

    [self createButton];

    // 創建一個標簽

    [self createLabel];

    // _timer成員變數初始化

    _timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(moveLabel) userInfo:nil repeats:YES];

}

(4). 編寫代碼創建一個按鈕

- (void)createButton{

    UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(50, 50, 200, 30)];

    btn.backgroundColor = [UIColor redColor];

    [btn setTitle: @"點我啟動或停止" forState:UIControlStateNormal];

    [btn addTarget:self action: @selector(startOrStop) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btn];

}

編寫代碼,完善點擊按鈕的響應程式

- (void)startOrStop{

    static BOOL isRunning = YES;

    if (isRunning ) {

        [_timer setFireDate:[NSDate distantFuture]];

        isRunning = NO;

    }else{

        [_timer setFireDate:[NSDate distantPast]];

        isRunning = YES;

    }

}

(5). 創建一個標簽

- (void)createLabel{

    UILabel *lbl = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 50, 30)];

    lbl.backgroundColor = [UIColor redColor];

    lbl.textColor = [UIColor blueColor];

    lbl.text = @"我是標簽";

    lbl.tag = 123;

    [self.view addSubview:lbl];

    

}

(6). 編寫代碼,完善定時器的響應方法

- (void)moveLabel{

    static int xOffset = 5, yOffset = 5 ;

    

    UILabel *lbl = (UILabel *) [self.view viewWithTag:123];

    

    CGRect frame = lbl.frame;

    frame.origin.x += xOffset;

    frame.origin.y += yOffset;

    

    CGFloat width = self.view.bounds.size.width;

    CGFloat height = self.view.bounds.size.height;

    

    if (frame.origin.x >= width || frame.origin.x < 0) {

        xOffset *= -1;

    }

    if (frame.origin.y >= height || frame.origin.y < 0 ) {

        yOffset *= -1;

    }

    

    lbl.frame = frame;

}

【註】實踐是檢驗真理的唯一標準!最好應用純代碼敲一遍

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • import java.util.Random; import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.PBEKey ...
  • 之前有兩篇文章關於推送證書配置的,特別是對於新手很有用,可以去看看. http://www.cnblogs.com/wolfhous/p/5344871.html http://www.cnblogs.com/wolfhous/p/5344853.html 開始集成極光推送 1,官網下載sdk以及d ...
  • 沒羽@阿裡移動安全,更多安全類技術乾貨,請訪問阿裡聚安全博客 這是Android mediaserver的提權漏洞,利用CVE-2014-7920和CVE-2014-7921實現提權,從0許可權提到media許可權,其中CVE-2014-7921影響Android 4.0.3及以後的版本,CVE-201 ...
  • 申請加急網址:https://developer.apple.com/appstore/contact/appreviewteam/index.html 補充:加急審核說明是可以寫中文的 提交加急審核需要理由,一般涉及到銀行信息,或者崩潰打不開這種的比較容易通過。反正蘋果很苛刻,一般不給處理。如果處 ...
  • 效果 想必大家對 iPhone 的指紋解鎖功能已經相當的熟悉了。來看看效果吧! Local Authentication 概述 Local Authentication 框架提供了按照指定的安全策略請求用戶授權(本地授權)的工具。例如, 通過 Touch ID 請求用戶授權。 LAContext L ...
  • 一,效果圖。 二,工程圖。 三,代碼。 ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a ni ...
  • 說到遠程推送,應該用的也挺多的,今天就基於SEA的雲推送服務,做一個推送的小demo,來瞭解一下iOS中的遠程推送是怎麼一回事兒,首先你得有蘋果的開發者賬號,好鹹蛋也差不多了,主要內容走起。 一、準備階段 1.在蘋果開發官網上申請推送證書之前需要一個名字叫做certSigningRequest文件。 ...
  • 五種交互方式,分別是:通過廣播交互、通過共用文件交互、通過Messenger(信使)交互、通過自定義介面交互、通過AIDL交互。(可能更多) Service與Thread的區別 Thread:Thread 是程式執行的最小單元,可以用 Thread 來執行一些非同步的操作。 Service:Servi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...