Objective-C簡稱OC,擴充?C語?的?向對象編程語?.是OS X和iOS操作系統的主要編程語言。下面是使用OC創建一個類:


類已創建完畢,下面是類的使用:

實例變量的可見度分為public(共有的),PRotected(保護的),private(私有的).
1 @interface Student : NSObject{2 @public //可在類外使用,可見度高,破壞封裝,使用較少.3 NSString *_name;4 @protected //默認的,實例變量只能在該類和其?類內操作5 NSString *_gender;6 @private //只能在類內使用 7 NSInteger _age;8 }
為了不破壞封裝類內一般使用protected(默認的)創建實例變量.為了在類外能使用類里的實例變量,就要在類內設置setter(設置器),getter(訪問器)方法.
//Student.h文件@interface Student : NSObject{ NSString *_name; NSString *_gender;}//設置姓名(聲明)-(void)setName:(NSString *)name;//設置性別(聲明)-(void)setGender:(NSString *)gender;//獲取姓名(聲明)-(NSString *)name;//獲取性別(聲明)-(NSString *)gender;@end//Student.m文件@implementation Student//設置姓名(實現)-(void)setName:(NSString *)name{ _name = name;}//設置性別(實現)-(void)setGender:(NSString *)gender{ _gender = gender;}//獲取姓名(實現)-(NSString *)name{ return _name;}//獲取性別(實現)-(NSString *)gender{ return _gender;}@end
這樣定義好設置器和訪問器就可以在主函數中使用實例變量了.
//main.m 主函數#import <Foundation/Foundation.h>#import "Student.h"int main(int argc, const char * argv[]) { @autoreleasepool { //Student 給alloc發送消息給內存,申請內存 //init student 給init發送消息初始化實例變量 Student *student = [[Student alloc] init]; //通過設置器賦值 [student setName:@"張三"]; //通過訪問器獲取name的值 NSString *str = [student name]; NSLog(@"%@",str); } return 0;}
OC中屬性對getter和setter方法做了默認實現,在一定程度上簡化了程序代碼,并增強了實例變量訪問的安全性.
屬性的定義:
1 #import <Foundation/Foundation.h>2 3 @interface Student : NSObject4 @property NSString *name;5 //相當于@interface中聲明了兩個方法(setter,getter)6 //-(void)setName:(NSString *)name;7 //-(NSString *)name;8 @end
屬性的實現:
1 #import "Student.h" 2 3 @implementation Student 4 @synthesize name = _name;//相當于@implementation實現了(setter,getter)方法 5 //-(void)setName:(NSString *)name{ 6 // _name = name; 7 //} 8 //-(NSString *)name{ 9 // return _name;10 //}11 @end
@synthesize name = _name;可以省略,可以只在頭文件里定義@property NSString *name;
OC中為屬性提供了?一些關鍵字?用以控制setter、getter的實現細節,也就是屬性的屬性.
屬性的屬性分為三類:
第?類:讀寫性控制(readonly、readwrite、setter、getter)
1)readwrite讀寫,默認的.編譯器聲明setter和getter方法.
2)readonly 只讀,編譯器只聲明getter方法.
3)setter給編譯器指定setter方法名.setter方法基本不使用,一般不要修改以其定義的setter方法名.
4)getter方法,給編譯器指定getter方法名,getter僅在BOOL類型的屬性中使用.
第?類:原?子性控制(nonatomic、atomic)
1)atonic 原子性,默認的,保證線程安全.占用很多系統資源,降低系統性能,一般用nonatonic.
2)nonatonic,非原子,不保證線程安全.
第三類:語義設置(assign、retain、copy)
1)assign 基本數據類型,默認的.
2)retain 只能給對象類型.
3)copy 只能給遵循<NSCopying>協議的對象類型使用.
使用方式:
1 #import <Foundation/Foundation.h>2 3 @interface CollegeStudent : NSObject4 @property (nonatomic,retain) NSString *name;5 @end
新聞熱點
疑難解答