IOS开发语法学习(一)

1.

IOS中类声明的文件叫做接口文件,以.h命名。

2.

类定义的文件叫做实现文件,以.m命名。

3.

#import是文件包含的内容。

4.声明对象

类名  *对象名     

* 表示对象是对类的一个引用

5.为对象分配空间

对象名=[类名  alloc]

alloc消息是定义在类方法中的

6.为对象进行初始化

对象名=[对象名  init]

init消息是定义在类方法中的

7.实例化对象

类名   *对象名=[[类名  alloc]  init]

8.实例化对象

类名   *对象名=[类名  new]

9.减号

减号表示一个函数、或者方法、或者消息的开始

10.

加号表示其他函数可以直接调用这个类中的这个函数,而不用创建这个类的实例

11.Java与OC方法对比

Java中的一个方法的代码如下 
public  void  test(bool   flag) 

  

  
若使用Objective-C则代码如下
-( void )  test:( bool )flag


12.中括号

[]代表方法的调用

Java中如下代码

this.test(true);

若使用Objective-C则代码如下

[self  test: YES ]; 

13.NS***

在 Mac  OS 中 NextStep 是一套函数库,函数库的开发人员将函数库里面所有的类都用 NextStep 的缩写打头命名,也就是 NS*

如:NSString、NSObject、NSLog

14.类的声明

#import  <Foundation/Foundation.h>

@interface  Test  :  NSObject

{

}

@end

在Xcode环境中,声明出来的类都有一个父类,NSObject父类是系统自动加上的,开发过程中可以根据实际情况修改

15.类的定义

#import  "Test.h"

@implementation  Test

 

@end

类名需要和类声明中的保持一致

16.一个方法传递多个参数

Java中如下代码

public  void   setParamsValue(  string  param1, string  param2,  string  param3) 

             

若使用Objective-C则代码如下

-( void )  setParamsValue:  (NSString   *)param1  mySecondVar:  ( NSString   *) param2   myThirdVar:  (NSString   *) param3 { 
  

17.带参数的方法的调用

Java中如下代码

Test  test  = new   Test(); 
test.setParamsValue(“a”,  “b”,  “ c” ); 

若使用Objective-C则代码如下

Test  *test  =  [[Test  alloc]  init ]; 
[test  setParamsValue:  @”a”  mySecondVar:  @”b”   myThirdVar:  @”c”]; 

18.动态类型id

在OC中,id类型是一个独特的数据类型,可以转换为任何数据类型。

使用id类型定义变量如下所示:

id  变量名;

返回id类型的方法定义如下所示,当然方法可以为有参的或无参的:

-(id) 方法名;

它表示任意的数据类型。

在OC中,一切东西都是指针形式保存,你获取到的就是这个对象在内存的位置。id 就是你知道这个位置,但是不知道里面是啥的时候的写法。 

19.NSArray

同一个数组可以保存不同类型的对象

20.YES  NO

Java中的true   false

对应着OC中的YES  NO  ,其值YES 是1   NO是0

21.nil

Java中的NULL

对应着OC中的nil,即空指针

22.@”字符串”而不是”字符串” 

”字符串”是C的字符串,@”"是把C的字符串转成NSString的

@这个转换是不支持中文的

23. 文件包含中的尖括号与双引号的使用区别

#import  <Foundation/Foundation.h>   使用尖括号,导入的文件是系统文件

#import  "Test.h"    使用双引号,导入的是本地自定义文件

24.实例变量的定义

实例变量即在类中定义的变量,可以在各个方法中使用。

实例变量需要在类声明文件即***.h中定义,如:

#import  <Foundation/Foundation.h>

@interface  Test  :  NSObject

{

       int   a;

}

@end

25.实例变量的使用

#import  <Foundation/Foundation.h>

#import  "Test.h" 

int main(int argc,const char * argv[])

{

     Test  *test=[[Test  alloc]  init];

     test->a=1;

     NSLog(@"a=%i", test->a);

}

26.extern声明变量

外部变量是在方法的外部定义的全局变量,作用域是从变量的定义处开始到程序执行结束。变量的使用必须是先定义后使用,若想实现在外部变量定义之前使用该外部变量,则需要使用extern对外部变量进行声明。

int main(int argc,const char * argv[])

{

     extern  m;

     NSLog(@"m=%i", m);

}

int  m=1;

27.auto

方法内部变量的默认声明方式

28.const

将变量的值声明为不可变的值即为常数

29.volatile

用来修饰在不同线程中需要进行访问或修改的变量

30.方法的声明

方法声明,是在类声明文件即***.h中的

#import  <Foundation/Foundation.h>

@interface  Test  :  NSObject

{

       int   a;

}

-/+(方法的返回值类型)   方法名;

@end

其中,-代表是对象方法,+代表是类方法

31.方法的定义

#import  "Test.h"

@implementation  Test

-/+(方法的返回值类型)  方法名

{

      //具体实现逻辑

}

@end

32.对象方法的使用

[对象名  方法名]

在对象方法使用时必须加上方括号[]

33.类方法的使用

类方法,无需创建类的实例对象就可以直接使用

[类名  方法名]

34.单个参数方法的声明

-/+(方法的返回值类型)  方法名:(参数类型)  参数名;

方法的返回值类型、参数类型必须使用括号括起来

35.单个参数方法的使用

[对象名  方法名:参数]      对象方法的使用

[类名  方法名:参数]     类方法的使用

36.属性

属性专指@property修饰过的成员变量,作用在于类以外的代码访问时,可以通过属性来访问内部变量,而不能直接访问类的成员。

37.属性声明

@property  类型  实例变量名称

相当于Java中对成员变量生成get和set方法

#import  <Foundation/Foundation.h>

@interface  Test  :  NSObject

{

       int   a;

}

@property  int  a;

-(void)  print;

@end

38.属性定义

@synthesize  实例变量名称

#import  "Test.h"

@implementation  Test

@synthesize  a;

-/+(void)  print

{

      NSLog(@"%i",a);

}

@end

 

#import  <Foundation/Foundation.h>

#import  "Test.h"

int main(int argc,const char * argv[])

{

    Test  *test=[[Test  alloc]  init];

    [test  setA:1];

    [test  print]

    return  0;

}

39.带参属性

属性声明时是可以带参数的,参数要使用括号括起来

@property  (参数)  类型   实例变量名称

40.setter设置器

设置实例变量的值

-(void)set+实例变量名:(参数类型) 参数名;

其中,实例变量名的第一个单词的首字母要大写

41.getter访问器

获取实例变量

-(返回值类型)实例变量名;

42.setter设置器  getter访问器  的调用

[对象名  set+实例变量名:数值]                    setter设置器的调用

[对象名  实例变量名]       getter访问器的调用

 

对象名.实例变量名=数值;         类似于setter设置器的调用

对象名.实例变量名;                   类似于getter访问器的调用

43.带参属性(读写属性)

@property(readonly) int    a;

readonly:只读,编译器不会生成setter方法

@property(readwrite) int    a;

readwrite:读写,可以获取并设置实例变量的值

44.带参属性(原子访问)

@property(atomic) int    a;

在默认情况下,属性是原子访问的,默认通过synthesized实现的setter和getter都是原子访问的。

@property(nonatomic) int    a;

非原子访问

45.带参属性(多个特性一起使用)

@property(特性1,特性2,...) 类型   实例变量名;

46.继承

:用来实现继承,在OC中默认的父类名是NSObject

在子类的声明文件即***.h中,若继承了自定义父类,要将父类的类声明文件即父类的头文件***.h包含进来

47.实例变量访问限定符@public

@public:作用域不受限制,即共用的数据成员

@public   数据类型   实例变量名;

48.实例变量访问限定符@protected

@protected:保护数据成员,它可以使得实例变量只可以在所属的类及其子类定义的方法中被直接访问。若实例变量没有被任何访问限定符修饰,则默认使用的是@protected

@protected   数据类型   实例变量名;

49.实例变量访问限定符@private

@private:私有数据成员,只可以在所属类的方法中调用

@private   数据类型   实例变量名;

50.方法重写(方法覆盖)

当子类和父类中的某一个方法具有相同的方法名、返回值类型、参数,那么子类的方法就覆盖了父类中的方法。在子类的头文件中,需要对这个覆盖方法进行方法声明,在子类的类定义文件.m中进行逻辑代码实现。

51.super

super关键字代表父类,使用它可以访问被子类所隐藏或者重写的父类方法。

super和方法名必须要用方括号括起来

[super  方法名];

52.方法重载

在类中可以创建多个相同名字的方法,但是这些同名的方法具有不同的参数数据类型或参数个数。

在调用时只要通过传递的参数个数和类型的不同,就可以区分具体调用的是哪个重载方法。

53.多态

多态:相同的消息给予不同的对象会引发不同的动作。

多态分为编译时多态(覆盖、重载)、运行时多态。

54.动态绑定

动态绑定是指在执行期间(非编译器)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。动态绑定的实现是离不开动态类型id的。

TestOne.h

#import  <Foundation/Foundation.h>

@interface  TestOne  :  NSObject

{

       NSString   *a;

}

-(void) setA;

-(void)  print;

@end

TestOne.m

#import  "TestOne.h"

@implementation  TestOne

-(void)  setA

{

      a=@"TestOne";

}

-/+(void)  print

{

      NSLog(@"%@",a);

}

@end

 

TestTwo.h

#import  <Foundation/Foundation.h>

@interface  TestTwo  :  NSObject

{

       NSString   *a;

}

-(void) setA;

-(void)  print;

@end

TestTwo.m

#import  "TestTwo.h"

@implementation  TestTwo

-(void)  setA

{

      a=@"TestTwo";

}

-/+(void)  print

{

      NSLog(@"%@",a);

}

@end

main.m

#import  <Foundation/Foundation.h>

#import  "TestOne.h"

#import  "TestTwo.h"

int main(int argc,const char * argv[])

{

    id  abc;

    TestOne  *testOne=[[TestOne  alloc]  init];

    abc=testOne;

     [abc   setA];

     [abc  print];

     

    TestTwo  *testTwo=[[TestTwo  alloc]  init];

    abc=testTwo;

     [abc   setA];

     [abc  print];

 

     return  0;

}

 

执行后的输入结果如下:

TestOne

TestTwo

 

 

资源推荐:CocoaChina.com

国内第一个也是最大的一个苹果相关产品的中文开发社区网站,网站前身是一个科技博客网站,经过发展积累,逐渐成为苹果电脑及iPhone手机开发的专业网站。网站目前提供各种苹果相关的开发内容,CocoaChina论坛也是国内最大的苹果电脑开发及iPhone开发论坛。

http://www.cocoachina.com/news/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值