IOS開發之基礎oc語法


1.類的定義:        

 類=屬性+方法;

 -屬性代表類的特征

 -方法是類能對變化做出的反應

     類定義的格式:類的聲明和類的實現組成

 -接口(類的聲明):@interface 類名:基類的名字

     .類名首字母要大寫

     .冒號表示繼承關系,冒號后面的是類的父類

     .NSObject是OC所有類的基類

     .類的聲明放在“類名+.h”文件中,要由兩部分組成:實例變量和方法

 -實現(類的實現):@implementation類名

     .方法實現

 -都用@end結束c

 

2.類的使用:

OC中,對象通過指針來聲明   如:ClassA *object;

OC中對象的創建,使用alloc來創建一個對象,編譯器會給object對象分配一塊可用的內存地址,然后需要對對象進行初始化即調用init方法,這樣這個對象才可以使用,如:

Person *person=[Person alloc];      //創建對象分配空間

person=[person init];               //初始化賦初值,

初始化后:int=0,char=“*0”?,bool=FALSE

同一個類的每個對象有不同的實例變量的存儲空間

同一類的每個對象共享該類的方法

方法嵌套的形式來調用,如:ClassA *object=[[ClassA alloc] init];

 

3.類的訪問權限

三種訪問權限:

-公有的:@public

-私有的:@private

-保護的:@protected

屬性默認的權限是保護的

方法默認的權限是公有的

 

4.方法定義

無參無返: -(void)print;

無參有返: -(Person *)register;

有參無返: -(void)intuit:(int)newId;

有參有返: -(Person *)init:(int)newId;

 

帶一個參數的方法

-(Person *) init:(int) newID;

帶兩個參數的方法:

-(Person *) init:(int) newID:(int) newAge;

“:”是方法名的一部分

-第一個方法名:init

-第二個方法名:init:

-第三個方法名:init::

 

多參數方法定義:

-(Person *)initWithId:(int) newID andAge:(int) newAge andName:(NSString *)name;

可以在方法名前面加任意標記如“WithId”,“andAge”,“andName”以此類推

5.實例                  

main:

#import <Foundation/Foundation.h>
#import "dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //創建對象,即實例化對象
        Dog *haShiQi=[[Dog alloc]init];
        //方法調用
        [haShiQi bark];
        //屬性賦值
        haShiQi->health=120;
        haShiQi->name=@"哈士奇";
        NSLog(@"狗的姓名:%@,健康值%d",haShiQi->name,haShiQi->health);
    }
    return 0;
} 

Dog.m:類的實現

#import "Dog.h"     //引用類的聲明文件
@implementation Dog
//方法實現
-(void)bark{
    NSLog(@"汪汪");
}
@end

Dog.h:類的聲明

#import <Foundation/Foundation.h>
@interface Dog : NSObject   //聲明類Dog,繼承根基類NSObject
//類的屬性
{
    @public;               //設置類的屬性為公有(一般不允許使用)
    NSString *name;
    int health;
}
//對象方法
-(void)bark;
@end 

6.類方法和對象方法對比                  

·對象方法(實例方法)

-以減號“-”開頭

-只能讓對象調用,沒有對象,這個方法根本不可能被執行

-對象方法能訪問實例變量

·類方法

-以加號“+”開頭

-只能用類名調用,對象不能調用

-類方法中不能訪問實例變量(成員變量)

-使用場合:當不需要訪問成員變量的時候,盡量用類方法

-類方法和對象方法可以同名7.屬性的存取方法

·獲取屬性值(getter)方法的定義

-作用:返回對象內部的成員變量

-命名規范:get方法的名稱一般就跟成員變量同名

·設置屬性的值(setter)方法的定義

-作用:用來設置成員變量,可以在方法里面過濾掉一些不合理的值

-命名規范:

-方法都是以set開頭,而且后面跟上成員變量名,成員變量名的首字母必須大寫

-形參名稱不要跟成員變量同名

 

8.getter,setter方法實例

 

main:

#import <Foundation/Foundation.h>
#import "dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //創建對象,即實例化對象
        Dog *haShiQi=[[Dog alloc]init];
        //方法調用
        [haShiQi bark];
        //屬性賦值
        [haShiQi setName:@"哈士奇"];   //調用setter方法賦值
        [haShiQi setHealth:120];
        NSLog(@"狗的姓名:%@ 健康狀況:%d",haShiQi.name,haShiQi.health);
    }
    return 0;
}

Dog.m:類的實現

#import "Dog.h"     //引用類的聲明文件
@implementation Dog
//方法實現
-(void)bark{
    NSLog(@"汪汪");
}
//setter方法
-(void)setName:(NSString *)newName{
    name=newName;
}
//getter方法
-(NSString *)name{
    return name;
}
//setter方法
-(void)setHealth:(int)newHealth{
    health=newHealth;
}
//getter方法
-(int)health{
    return health;
}
@end 

Dog.h:類的聲明

#import <Foundation/Foundation.h>
@interface Dog : NSObject   //聲明類Dog,繼承根基類NSObject
//類的屬性
{
    NSString *name;
    int health;
}
//對象方法
-(void)bark;
-(void)setName:(NSString *)newName;         //setter方法
-(NSString *)name;                          //getter方法
-(void)setHealth:(int)newHealth;
-(int)health;
@end

9.自動生成屬性的存取方法

·@property語法

·@synthesize

·封裝的好處:

-過濾不合理的值

-屏蔽內部的賦值過程

-讓外界不必關注內部的細節

 

10.自動生成屬性的存取方法實例

main:

#import <Foundation/Foundation.h>
#import "dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //創建對象,即實例化對象
        Dog *haShiQi=[[Dog alloc]init];
        //方法調用
        [haShiQi bark];
        //屬性賦值
        [haShiQi setName:@"哈士奇"];
        [haShiQi setHealth:120];
        NSLog(@"狗的姓名:%@ 健康狀況:%d",haShiQi.name,haShiQi.health);
    }
    return 0;
}

Dog.m:類的實現

#import "Dog.h"     //引用類的聲明文件
@implementation Dog
//方法實現
-(void)bark{
    NSLog(@"汪汪");
}
@synthesize name,health; //封裝,代替了setter,getter
@end

Dog.h:類的聲明

#import <Foundation/Foundation.h>
@interface Dog : NSObject   //聲明類Dog,繼承根基類NSObject
//類的屬性
{
@public;               //設置類的屬性為公有
    NSString *name;
    int health;
}
-(void)bark;
@property int health; //封裝,代替了setter,getter
@property NSString *name;
@end

11.方法重載

·OC中不是嚴格的函數重載

命名沖突:

-(int)doSomething(int)X;

-(int)doSomething(float)X;

命名沖突:

-(int)doSomething(int)x:(int)y;

-(int)doSomething(float)x:(int)y;

不沖突:

-(int)doSomething(int)x:(int)y;

-(int)doSomething(int)x: andY:(float)y;

因為一個是“doSomething:”,“另一個是doSomething::”

 

12.繼承

·不改變原來模型的基礎上,拓充方法

·建立了類與類之間的聯系

·抽取了公共代碼

·減少冗余代碼

·壞處:耦合性強


免責聲明!

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



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