Objective-C基礎筆記二

NSString 類介紹及用法


本小節知識點:

  1. 【掌握】NSString常見方法
  2. 【掌握】NSString字符串長度計算

1.NSString常見方法

  • NSString是 Objective-C 中核心處理字符串的類之一

  • 創建常量字符串,注意使用“@“符號。

    NSString *astring = @"This is a String!";
  • 創建空字符串,給予賦值。

    NSString *string = [NSString new];
    string = @"This is a String!";
  • 創建格式化字符串:佔位符(由一個%加一個字符組成)

    [NSString stringWithFormat:@"豪哥%i歲了", 24];

2.NSString字符串長度計算

  • 通過調用NSString類的對象方法 length 可以獲得字符串的長度
  • 字符串長度是指該字符串中一共有多個字符(無論是中文還是英文)

  • 純英文字符

    NSString *str = @"cdh";
    NSLog(@"length = %i", [str length]);
    輸出結果:3
  • 中英文混合

    NSString *str = @"cdh陳";
    NSLog(@"length = %i", [str length]);
    輸出結果:4
  • 純中文

    NSString *str = @"陳德豪";
    NSLog(@"length = %i", [str length]);
    輸出結果:3
    NSUInteger 就是 unsigned long
    源碼:
    typedef unsigned long NSUInteger;

問題1.如何創建OC字符串?

NSString *str = @"cdh";
printf("age = %i, height = %f\n", 30, 1.75);
NSString *str = [NSString stringWithFormat:@"age = %i, height = %f\n", 30, 1.75];
NSLog(@"str = %@", str);

問題2 如何計算字符串的長度?

char name[] = "cdh";
char name[] = "chen";

// 包含\0
size_t size = sizeof(name);
printf("size = %lu\n", size);

// 不包含\0
size_t length = strlen(name);
printf("length = %lu\n", length);

// 不包含\0的
// 計算出來的是個數, 而不是佔用的字節數
NSString *str1 = @"cdh";
NSString *str2 = @"陳德豪";
NSUInteger len = [str2 length];
NSLog(@"len = %lu", len);

問題3:OC中%@ 是做什麼用的?

答:輸出OC的字符串使用%@, %@就專門用於輸出對象類型的

問題4:如何計算字符串的長度?

答:OC中調用length方法,計算字符的個數, 而不是佔用的字節數


結構體成員變量


本小節知識點:

  1. 【掌握】結構體成員變量

1.結構體成員變量

設計一個”學生“類 1> 屬性
* 姓名
* 生日
用結構體作爲類的實例變量(生日)
typedef struct {
    int year;
    int month;
    int day;
} Date;

結構體作爲對象屬性
@interface Person : NSObject
{
    @public
    NSString *_name;//定義姓名 
    Date _birthday;//定義生日
}
@end

@implementation Person
@end

int main(int argc, const char * argv[]) {
    Person *p = [Person new];
    p->_name = @"sb";

    //因爲結構體已經初始化爲0了,在次初始化就報錯了,但是可以逐個賦值。
    //p->_birthday = {1990,12,3};

    //方法一:強制轉換
    stu->_birthday = (Date){1986, 1, 15};

    //方法二:定義一個新的結構體,給d賦值,將d賦值給_birthday
    Date d = {1986, 1, 15};
    stu->_birthday = d;

    //方法三:分別賦值
    stu->_birthday.year = 1986;
    stu->_birthday.month = 1;
    stu->_birthday.day = 15;

    NSLog(@"%@的生日是:%d年%d月%d 日",p->_name,p->_birthday.year,p->_birthday.month,p->_birthday.day);
    return 0;
}


問題:如何將作爲屬性的結構體進行初始化?

方法一:強制轉換
方法二:定義一個新的結構體,給d賦值,將d賦值給_birthday
方法三:分別賦值


對象和方法之間的關係


本小節知識點:

  1. 【掌握】對象作爲方法的參數
  2. 【掌握】對象作爲方法的返回值

1.對象作爲方法的參數

  • 對象作爲方法參數傳遞是地址傳遞,因爲對象是一個指針變量
  • 在方法內部,可以通過對象形參,訪問該對象的成員變量(如果該對象的該成員變量的訪問權限是public的)
  • 在方法內部,可以通過對象形參,調用該對象上的方法(給這個對象發送消息),這個和函數指針類似
  • 對象也可以作爲方法的參數連續傳遞

2.對象作爲方法的返回值

  • 對象可以作爲方法的返回值;
  • 對象返回值的實質是返回指向該對象的指針,該對象是存儲在堆內存中的。
  • 由於堆內存是由程序員管理的,所以它不會因爲函數結束而被銷燬

多文件開發


寫過嵌入式的或者其他編程項目都知道多文件開發的好處是不言而喻的!下面直接上問題:

問題1:爲什麼要使用多文件?

一個iOS項目可能會有多個人開發,如果多個人同時修改一個文件,那麼就很可能會產生衝突,比如這個增加一個方法,那個人把這方法刪掉了。另外就是當把多個人寫功能合併起來的時候,也非常困難,寫到一個文件中,無法順暢的進行團隊合作

問題2:OC中如何進行多文件開發?

  1. 在工作中,通常把不同的類放到不同的文件中,每個類的聲明和實現分開
  2. 聲明寫在.h頭文件中,
  3. 實現寫在相應的.m文件中去,
  4. 類名是什麼,文件名就是什麼

問題3:使用多文件開發有什麼好處?

  1. 顯著提高團隊協作的效率
  2. 提高程序的開發速度
  3. 提高程序的可維護性
  4. 提高代碼的可讀性

#pragma mark指令


本小節知識點:

  1. 【瞭解】#pragma mark指令的使用

1.#pragma mark指令的使用

  • 功能:簡單來說就是對代碼的分組,方便代碼查找和導航用的 它們告訴Xcode編譯器,要在編輯器窗格頂部的方法和函數彈出菜單中將代碼分隔開。一些類(尤其是一些控制器類)可能很長,方法和函數彈出菜單可以便於代碼導航。此時加入#pragma 指令(#pragma是一個編譯指令)對代碼進行邏輯組織很有效果。

  • 一個類裏我們總會有一些方法的功能與性質是相差不多的,你可能會有把方法們分組的想法。Xcode已經有了類似的支持,它就是 #pragma mark。

    • 分組: #pragma mark 分組(標識)名稱
    • 分隔線: #pragma mark -
    • 分割線加分組: #pragma mark - 分組(標識)名稱

Xcode模板修改/文檔安裝


本小節知識點:

  1. Xcode模板修改以及main函數的內容
  2. 修改OC文件頭部的描述信息
  3. Xcode文檔安裝
  4. 開啓、關閉顯示隱藏文件(經常用)

1. 修改項目模板以及main函數中的內容

  • 修改方法

    略;
  • 修改文件路徑:

    /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Mac/Application/Command Line Tool.xctemplate/

2.修改OC文件頭部的描述信息

  • 修改方法

    略;
  • 文件路徑:

    /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/Source/Cocoa Class.xctemplate

3.Xcode文檔安裝的位置

  • 安裝方法:

  • 安裝的位置1:

    /Applications/Xcode.app/Contents/Developer/Documentation/DocSets

    注意: 拷貝之前最好將默認的文檔刪除, 因爲如果同時存在高版本和低版本的文檔, 那麼低版本的不會顯示;

  • 安裝的位置2:

    /Users/你的用戶名/Library/Developer/Shared/Documentation/DocSets

    注意: 如果沒有該文件夾可以自己創建一個;


4.開啓、關閉顯示隱藏文件(經常用)

  • 打開顯示隱藏文件

    • 打開終端,輸入以下命令,然後重啓一下finder即可;
    defaults write com.apple.finder AppleShowAllFiles -bool true
    或
    defaults write com.apple.finder AppleShowAllFiles YES
    或
    defaults write com.apple.finder AppleShowAllFiles yes
  • 關閉顯示隱藏文件

    • 打開終端,輸入以下命令,然後重啓一下finder即可;
    defaults write com.apple.finder AppleShowAllFiles -bool false
    或
    defaults write com.apple.finder AppleShowAllFiles NO
    或
    defaults write com.apple.finder AppleShowAllFiles no

總結


1. OC字符串創建、輸出、以及字符個數

  • 使用NSString
  • OC字符串是對象,所以是要使用指針 NSString *
  • OC字符串賦值是 @”“
  • OC字符串取值輸出是 %@
  • OC中調用length方法,計算字符的個數, 而不是佔用的字節數

2. 結構體作爲屬性是進行初始化

方法一:強制轉換
方法二:定義一個新的結構體,給d賦值,將d賦值給該屬性
方法三:分別賦值

3. 多文件開發

略;

4.#pargma mark指令應用

  • 分組: #pragma mark 分組(標識)名稱
  • 分隔線: #pragma mark -
  • 分割線加分組: #pragma mark - 分組(標識)名稱

5.匿名對象的使用

  • 應用場景:
    • 只需要使用一次
    • 作爲參數(實參)傳遞

發佈了34 篇原創文章 · 獲贊 12 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章