OC 實例方法和類方法區別


 
         
     Objective-C里面既有實例方法也類方法。類方法(Class Method) 有時被稱為工廠方法(Factory Method)或者方便方法(Convenience method)。工廠方法的稱謂明顯和一般意義上的工廠方法不同,從本質上來說,類方法可以獨立於對象而執行,所以在其他的語言里面類方法有的時候被稱為靜態方法。
注意點一:類方法
1,類方法可以調用類方法。
2,類方法不可以調用實例方法,但是類方法可以通過創建對象來訪問實例方法。
3,類方法不可以使用實例變量。類方法可以使用self,因為self不是實例變量。
4,類方法作為消息,可以被發送到類或者對象里面去(實際上,就是可以通過類或者對象調用類方法的意思
 
         
注意點二:類方法和實例方法  
1:實例方法是— 類開頭是+ 實例方法是用實例對象訪問,類方法的對象是類而不是實例,通常創建對象或者工具類。
   在實例方法里,根據繼承原理發送消息給self和super其實都是發送給self
  在類方法里面self是其他的類的類方法,在類方法中給self發送消息只能發類方法self是類super也是
  什么時候用類方法,要創建一個實例時候獲取一個共享實例,或者獲取關於類的一些共有信息
 
         
2:類方法(class method)和實例方法(instance method)。類方法被限定在類范圍內,不能被類的實例調用(即脫離實例運行)。alloc就是一種類方法。實例方法    限定在對象實例的范圍內(即實例化之前不能運行)。init就是一種實例方法,被alloc方法返回的對象實例調用。
 
         
instance method  以減號 "-" 開頭 
class method  以加號 “+” 開頭,相當於static方法

1
#import <Foundation/Foundation.h> 2 /* 3 對象方法 4 1> 減號 - 開頭 5 2> 只能由對象來調用 6 3> 對象方法中能訪問當前對象的成員變量(實例變量) 7 8 類方法 9 1> 加號 + 開頭 10 2> 只能由類(名)來調用 11 3> 類方法中不能訪問成員變量(實例變量) 12 13 14 類方法的好處和使用場合 15 1> 不依賴於對象,執行效率高 16 2> 能用類方法,盡量用類方法 17 3> 場合:當方法內部不需要使用到成員變量時,就可以改為類方法 18 19 可以允許類方法和對象方法同名 20 */ 21 22 23 @interface Person : NSObject 24 { 25 int age; 26 } 27 28 // 類方法都是以+開頭 29 + (void)printClassName; 30 31 - (void)test; 32 + (void)test; 33 34 @end 35 36 @implementation Person 37 38 + (void)printClassName 39 { 40 // error:instance variable 'age' accessed in class method 41 // 實例變量age不能在類方法中訪問 42 //NSLog(@"這個類叫做Person-%d", age); 43 } 44 45 - (void)test 46 { 47 NSLog(@"111-%d", age); 48 49 //[Person test]; 50 } 51 52 + (void)test 53 { 54 // 會引發死循環 55 //[Person test]; 56 57 NSLog(@"333"); 58 59 // 會引發死循環 60 // /[Person test]; 61 } 62 63 @end 64 65 int main() 66 { 67 //[Person printClassName]; 68 69 [Person test]; 70 71 //Person *p = [Person new]; 72 //[p test]; 73 74 /* 75 -[Person printClassName]: unrecognized selector sent to instance 0x7fa520c0b370 76 */ 77 // 系統會認為現在調用的printClassName是個對象方法 78 //[p printClassName]; 79 80 return 0; 81 }

 

 
       


免責聲明!

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



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