Objective-C 快速入門--基礎(一)


1、實例變量的可見度有哪些?對訪問變量有什么影響?

所謂的內部,指的是相應類的@implementation和@end之間

示例:

@interface Person : NSObject

{

  @public

  NSString *_hobby;   //興趣!

  @protected

  NSString *_name;   //姓名

  int _age;        //年齡!

  @private

  NSString *_sex; //性別

}

2、如果對於一個類Person來說,類中的實例變量_name,可見度設為受保護的.那我如何在本類及其子類以外的地方給_name賦值和取值呢?

  使用setter和getter方法,示例:

  .h中:

  

  .m中:

  

main.m中:

  

控制台輸出:

  

3、OC中方法的類型有哪些?每種類型的方法各有什么特點?

  OC中的方法有兩種:①類方法②實例方法

  ①   類方法:只能類使用,例如:+(id)alloc ;注意:類方法中不能使用實例變量;

  ②   實例方法:只能對對象使用,例如:-(void)sayHi;

4、什么時候使用類方法?類方法和實例方法的優缺點是什么?

  ①類方法(+)應該是對整個模型層面的操作;②實例方法(-)是對某單個模型的操作。

  例如:有一個朋友圈類,發布朋友圈或者加載我的朋友圈應該是封裝成類方法,對某一條朋友圈評論或贊應該封裝成實例方法。

     又如有一個用戶類,請求附近的用戶,應該寫成類方法,更新當前用戶的資料,應該寫成實例方法。

5、對於OC中的一個方法 – (void)initWithName: (NSString *)name Age: (int)age Sex: (NSString *)sex;它的什么類型的方法?函數名是什么?有幾個參數?返回值是什么類型?

  ①實例方法;②函數名是:initWithName:  Age:  Sex;③有3個參數;④返回值是void類型;

6、#include,#import,@class各有什么作用?

(1)#include:

  區分 #include <x.h>與#include "x.h"的作用:

  #include <x.h>:它用於對系統自帶的頭文件的引用,編譯器會在系統文件目錄下去查找該文件。

  #include "x.h":用戶自定義的文件用雙引號引用,編譯器首先會在用戶目錄下查找,然后到安裝目錄中查找,最后在系統文件中查找。

  在使用#include的時候要注意處理重復引用(這也是objc中#include與#import的區別);

  例如:ClassA 與 ClassB同時引用了ClassC,不做重復引用處理的時候在ClassD中同時引用ClassA,ClassB編譯會提示對ClassC重復引用的錯誤.

  我們可以:#ifndef _CLASSC_H

                  #define _CLASSC_H

                  #include "ClassC"

                  #endif

   這樣處理在編譯時就不會有重復引用的錯誤出現(在objc中#import解決了這個問題,這是它們的區別)

(2)#import:

  #import 大部分功能和#include是一樣的,但是他處理了重復引用的問題,我們在引用文件的時候不用再去自己進行重復引用處理.

(3)@class:

  主要是用於聲明一個類,告訴編譯器它后面的名字是一個類的名字,而這個類的定義實現是暫時不用知道的,后面會告訴你.也是因為在@class僅僅只是聲明一個類,所以在后面的實現文件里面是需要去#import這個類,這時候才包含了這個被引用的類的所有信息

※綜上所述#include,#import與@class的區別可以做一下理解:

  #include與#import在引用一個類的時候會包含這個類的所有信息包括變量方法等,但是這樣做會對編譯效率造成影響.比如有100個類都#import了ClassA,那么在編譯的時候這100個類都會去對ClassA處理.又比如A被B引用,B被C引用,C被D引用.....此時如果A被修改,那么后面的B,C,D.....都需要重新進行編譯.還有一個用法會引起編譯錯誤的就是在ClassA中#import ClassB 在ClassB中#import ClassA那么在編譯的時候也會出現未知錯誤。

  所以一般來說,在interface中引用一個類,就用@class,它會把這個類作為一個類型來使用,而在實現這個interface的文件中,如果需要引用這個類的實體變量或者方法之類的,還是需要import這個在@class中聲明的類。

7、什么時候會造成循環導入?請舉例:

  當有兩個同時繼承於NSObject的類(如:Man和Woman這兩個類同時繼承與NSObject),現在在Man這個類中要導入Woman實例變量,同時Woman這個類要導入Man這個實例變量,並且導入時使用#import,這個時候就會造成循環導入現象,處理方式是在其中一個類中使用@class;舉例如下:

  ①新建一個繼承於NSObject的Woman類:

  

②再新建一個繼承於NSObject的Man類:

  

@dingding3w@126.com

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM