A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

iOS开发的一些学习心得一:Objective-C iPad,iPhone入门
(如果觉得喜欢,请关注这个微薄:http://weibo.com/javaplatform,很有用!哪里有更多的内容和资讯)
最近在做iPad的一个应用开发,以前从来没有接触过这块,发现有点乱,本人有一些程序基础,但做起来还是让人一头雾水,这里将自己的一些学习心得分享出来,希望对入门者有所帮助。
在基于iOS开发之前,我建议大家先不要去了解其它的东西,先对Objective-C进行一个学习。如果你有C,C++的基础,可以直接从语法类比入手进行学习,这里直接列出来一些(英语过的去可以直接参考考官方的文档Learning Objective-C: A Primer):
首先Objective-c完全兼容ANSI C,是C的一个超集(所以一些语法上可以共用,但注意在具体的基于iOS开发时由于有强大的SDK支持,所以直接用C的一些操作方法可能多于或者说给自己带来不少麻烦)。其源文件名相对C和C++有所调整,具体如下:
头文件 *.h(和C/C++没有区别)
源文件 *.m(C对应的后缀);*.mm(包括C++编码的后缀)
Objective-c中对类的定义由两个关键字完成(@interface和@implementations),下图类似Java里面的接口定义。

注意带有@的我们都可以认为是Objective-c针对C和C++的扩展)。
上面的具体实现可以如下代码来写:
@implementation MyClass
-(id)initWithString:(NSString*)aName{
}
+(MyClass*)createMyClassWithString:(NSString*)aName{
}
@end
强类型和范类型提醒一下,在Objetive-c中用id关键字来标识范类型,在Java中我们可能用Object类定义,在C中可能会通过void *等来做。
对方法的定义在Objective-c中如下,大家注意一下即可:

上面被大家容易忽略的是方法前面的-号代表什么意思?这不是我们理解的私有,公有方法的意思,-号代表实例级别的方法,+号代表类方法,同Java里面的static方法。
调用方法也很好玩的语法,不过习惯了还是可以的,具体如下:
[myArray insertObject:anObject atIndex:0];//这个方法调用给人感觉很费解啊。
属性的声明,这个特性让我们想起类Java多烦,也让我们想起了Action Script等一些脚本语言的特性。具体如下:
@property (属性元数据) 属性类型 属性名称。这和在@interface{}中定义类变量是不一样的,这个主要用于外部调用。
属性元数据有如下的选项可以参考(http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW14)。还是比较灵活的。
Objective-C中还有一个很重要的概念是Protocol。这让我想起了Java中的抽象类,我们可以定义那些方法必须被实现者重写,那些可以选。
详细语言参考请查阅(The Objective-C Programming Language)。
语法我就说这么多,下面我们举个例子(熟悉Java的朋友可以看看类比着学习一下啊)。
先写Java代码如下:
public interface MyInterface{
    void method1();
    int method2(int param1,int param2);
}
public abstract class MyAbsClass{
    public abstract void requiredMethod();//必须要求子类实现的方法
   public void optionMethod();//子类可选实现的方法
}
public class MyClass extends MyAbsClass implements MyInterface{
   public void method1(){}
   public int method2(int param1,int param2){return param1+param2;}
  public void requiredMethod(){}
}
下面是Objective-C代码:
@interface MyClass:NSObject<MyAbsClass>
-(void)method1;
-(int)method2:(int)param1 param2:(int)param2;
@end
@implementations MyClass
-(void)method1{
}
-(int)method2:(int)param1 param2:(int)param2{
return param1+param2;
}
-(void)requiredMehtod{
}
@end
还有大家最急着想动手的前提条件就是定义完类之后如何进行创建,在Java/C++中用new和构造方法就可以搞定,那么在C中我们知道都需要调用alloc之类的先对struct进行空间开辟,然后填充初始化值,那么在Objective-C中首先支持alloc,只是做了OO封装(NSObject),我们可以重写,如果我们要有自己的构造函数,可以通过类方法来完成。

9 个回复

倒序浏览
犀利的表情出来了。。:lol
回复 使用道具 举报
支持你,不过有代码时要看看如何插入代码的方法。
回复 使用道具 举报
零基础的不懂 会两种语言是什么感觉。。。
回复 使用道具 举报
:(:(:(:(:(
回复 使用道具 举报
学习学习
回复 使用道具 举报
学习了{:3_64:}
回复 使用道具 举报
好东西,支持一下!
回复 使用道具 举报
:(看到你我不好了,fighting~
回复 使用道具 举报
学习了:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马