IOS 开发学习(1): 学习纲领以及Objective-C 基本语法学习

  1.  IOS 开发学习(1): 了解一下Objective-C的基本语法. 这部分基本是看完概述就完了. 因为实际上不练手的话, 看到的基本都忘记了. 任意一本介绍Objective-c的书都行, 重点是联想对比, 我这里会采用和Java的对比关系来说名, 存在重点语法冲突的地方, 将标注明确.
  2. IOS 开发学习(2):IDE环境学习, 目前是XCode 4.3.3. 第一步都是跟环境做一下艰难的斗争,  当开发环境不成为你的障碍时, 你才能集中精神去了解编程语言的精髓。我赞同这样的学习思路:    编程语言学习  ——》开发环境 ——》 软件框架学习 ——》 具体软件业务的学习. 这个思路也尊崇软件的设计理念: 将容易变化的部分, 留在最后。【拓展开来,其实对学生教育也应该如此:先学不变的基本素质(良好的习惯、道德理念), 再学可变的具体知识, 包括专业知识. 扯得好远~ 收!】
  3.  IOS 开发学习(3): OS平台下组建、框架的学习. 重点学习的地方在于, 线程、UI语法, 文本(包括XML文件)处理、 MVC结构
  4. IOS 开发学习(4): 产品开发的完整流程, 即开发IOS程序, 从Helloworld书写, 到最后发布的全过程

以上是总纲, 下面是按照总纲的学习过程之一:IOS 开发学习(1): Objective-C 基本语法学习【学习的过程以C++/Java作为比较方式通同步学习】

类定义
C++/javaobj-C
关键词class关键词@interface
变量: 可定义为public/private属性@property, 相当于private
方法存在存在private/public方法都是public

[cpp]  view plain copy
  1. Obj-C声明和实现一般是分开的. 这个和C++类似  
  2. @interface Child :Parent  
  3. {  
  4.     //此处声明的对象都是public的  
  5.       NString a;  
  6. }  
  7. //此处声明的是需要加@property  
  8. @property int b;  
  9. @end  

注意, 在implement 文件中, 需要申明

@synthesize b;

这样表明用了系统内部的set和get方法, 否则是不能被使用的。




方法修饰
C++/javaobj-C
static静态方法+ 表示静态方法
-普通方法
存在private/puiblic都是public


Objective-C 方法调用
java/C++obj-c
instance.method()
instance.method(arg1)
instance.method(arg1, arg2)
[instance method]
[instance method: arg1]
[instance method: arg1 :arg2]  


特殊指针
java/C++obj-C
(void*)表示可指向任意类型的指针id表示可指向任意类型的指针
null表示为空nil表示为空
this指针    self指针 


null表示为空nil表示为空
注意, id只能指向实例对象, 基本类型不能使用id. 比如int类型

字符串
java/C++obj-c
 用String类型来表达, 类似于char* 或者char[]@字符串 来表示的,NSString类型 不加, 程序崩溃, 

布尔类型
java/C++obj-c
 boolean: true 和falsebool : 取值为yes,no



Obj-C 特有的语法:

IBoutlet、IBAction

1. 这两个在语法中没有特别含义

2. 如果希望在interface Builder中能看到这个控件对象,那么在定义的时候前面加上IBOutlet

3. 如果你希望在Interface Builder里控制某个对象执行某些动作,就在方法前面加上IBAction


附注: 个人编写的例子程序:

1. 类文件的interface声明:

[cpp]  view plain copy
  1. /* 
  2.  Do not confuse a property with an instance variable 不要将属性和实例变量混淆 
  3.  1. 实例变量默认为protected 访问权限, 外部是无法访问的 
  4.  2. 属性是可以被外面访问的,通过调用系统默认的setter和getter方法, e.g main方法中的 
  5.     a.numX = 10(调用setter) 或者[a setNumX 10] 
  6.     int s = [a numX]; 
  7.     一般而言, 对待属性,我们会用"."这样的方式赋值或者取值 
  8.   
  9.  */  
  10.   
  11. #import <Foundation/Foundation.h>  
  12.   
  13. @interface TestClass : NSObject  
  14. {  
  15.     //这里不能初始化, why?  
  16.     //此处定义的都是protected权限  
  17.     NSString *firstStr;  
  18.     //arry的用法  
  19.     NSArray *arr;  
  20. }  
  21.   
  22. //一般增加一个初始化函数  
  23. -(TestClass *)initNum:(int)n;  
  24.   
  25. -(NSString *) sayHello2everyone;  
  26.   
  27. // +表示静态方法,这里是静态方法的声明, 通过类直接调用  
  28. +(NSString *) staticShowInfo;  
  29.   
  30. //多个参数加返回值的声明, 尽量去掉describePara2, 加大复杂度并且和java/c++不统一  
  31. -(NSString *) show3para: (NSString *) a describePara2:(NSString *) b: (NSString*) c;  
  32.   
  33. //nonatomic 生成的Get和Set代码是不需要互斥操作,可以提高效率  
  34. //assgin   
  35. //readonly 只读,readwrite等, 不在一一举例  
  36.   
  37.   
  38. @property(assign, readwrite) int numX;  
  39.   
  40.   
  41. - (void)showHello;  
  42.   
  43. @end  

2. 类文件的实现:

[cpp]  view plain copy
  1. /* 
  2.  注意以下要点: 
  3.  1. 属性生成setter和getter方法声明 
  4.  2. 如何拼接字符创 
  5.  3. 多个方法的声明和实现 
  6.  4. 类自身的初始化动作 
  7.  */  
  8.   
  9. #import "TestClass.h"  
  10.   
  11. @implementation TestClass  
  12.   
  13. //@property 属性生成基本方法,如果不在此声明,将导致变量无法被访问  
  14. @synthesize numX;  
  15.   
  16. - (void) showHello  
  17. {  
  18.     NSLog(@"%@", self->firstStr);  
  19.     //array的使用  
  20.     for (int i = 0; i < [arr count]; i++) {  
  21.         NSLog(@"%@", [arr objectAtIndex:i]);  
  22.     }  
  23.       
  24. }  
  25.   
  26. - (NSString*) sayHello2everyone  
  27. {  
  28.     return @"hello objective c";  
  29. }  
  30.   
  31. //多个参数加返回值的实现,尽量去掉describePara2, 加大复杂度并且和java/c++不统一  
  32. //即建议修改为:- (NSString*) show3para:(NSString *)a :(NSString *)b :(NSString *)c{}  
  33. - (NSString*) show3para:(NSString *)a describePara2:(NSString *)b :(NSString *)c  
  34. {  
  35. //    需要手动释放  
  36. //    NSString *newString = [[NSString alloc] initWithFormat:@"%@--%@--%@",a,b,c];  
  37. //    可以Autorelease, 推荐用该方法  
  38.     NSString *newString = [NSString stringWithFormat:@"%@-x-%@-x-%@",a, b, c];  
  39.     return newString;  
  40. }  
  41.   
  42. /* 
  43.  重写自己的初始化方法(注意系统有自己的init方法) 
  44.  以init开头的方法名 
  45.  */  
  46. -(TestClass *)initNum:(int)n  
  47. {  
  48.     self = [super init];  
  49.     if (self) {  
  50.         //执行初始化操作  
  51.         firstStr = @"init string";  
  52.         NSLog(@"初始化");  
  53.         numX = n;  
  54.         //array的初始化  
  55.         arr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];  
  56.     }  
  57.     return self;  
  58. }  
  59.   
  60. /* 
  61.  +表示静态方法,这里是静态方法的实现, 通过类直接调用 
  62.  */  
  63. +(NSString*) staticShowInfo  
  64. {  
  65.     return @"let me static showInfo";  
  66. }  
  67.   
  68. @end  

3. 类文件的使用main.m:

[cpp]  view plain copy
  1. /* 
  2.   
  3.  程序的调用方式. 这个是外部如何使用已经定义好的类 
  4.  TestClass这个类如何被外部调用 
  5.   
  6.   
  7.  */  
  8.   
  9. #import <Foundation/Foundation.h>  
  10. #import "TestClass.h"  
  11.   
  12. int main(int argc, const char * argv[])  
  13. {  
  14.   
  15.     @autoreleasepool {  
  16.           
  17.         TestClass *a = [[TestClass alloc]initNum:15];  
  18.         [a setNumX:12347];  
  19.         [a showHello];  
  20.         int value = [a numX];  
  21.         NSString* a1 = @"1";  
  22.         NSString* a2 = @"2";  
  23.         NSString* a3 = @"3";  
  24.         //注意多个参数加返回值的调用, 参数描述describePara2不能省略  
  25.         NSString *m = [a show3para:a1 describePara2:a2:a3];  
  26.         NSLog(@"%d", value);  
  27.         NSLog(@"%@",m);  
  28.         NSString *s = [NSString stringWithFormat:@"%@",@"abcxxx"];  
  29.         NSLog(@"%@",s);  
  30.         //相当于调用setNumX, 不推荐使用a.numX = 10;虽然可以使用  
  31.         [a setNumX:10];  
  32.         NSString *info = [TestClass staticShowInfo];  
  33.         NSLog(@"%@", info);  
  34.   
  35.           
  36.           
  37.     }  
  38.     return 0;  
  39. }  


参考资料:

【1】 objective-c和java,C++的比较

【2】 Objective-C 与 C++ 的异同

【3】Learning Objective-C: A Primer中文翻译

【4】苹果官方的中文全教程


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值