初学Objective-C语法

先自我介绍下吧,我09年接触iOS开发,10年开始第一份正式的iOS开发的工作,算下来有5、6个年头了,接触过社交、工具、电商、阅读等类型的应用,但是....到现在为止竟没有一个正式的博客,也算是够懒的了。好吧,今天开始准备把之前积累的一些经验分享出来。希望大家给点掌声👏👏👏👏,谢谢~

本人是从C++转向iOS开发的,所以先谈谈刚接触iOS开发容易犯的几个错误:

1.  Objective-C的语法问题

    OC采用的语法跟C++很不一样,初学时最容易搞错的就是语法了,我是花了两天的时间才习惯过来。C++ 采用的是. 和->来作为变量或属性的连接符,而且可以多个函数或者属性连续调用; 而OC中方法调用方法是用[],调用的对象和方法之间用空格分开,.是用来调用属性的。举个栗子来说,要让对象a调用print方法,print方法有一个参数,是一个字符串test,那么 C++的写法是这样的:

     a.print("test");

而Objective-C是这样的:

    [a print:@"test"];

如果print方法是a某个公开的成员变量m_aaa的方法,那么C++是这样写的:

    a.m_aaa.print("test");

或者 

   a->m_aaa.print("test");

而Objective-C是这样的(Objective-C中没有公开的成员变量,类似的变量叫做属性):

   [a.m_aaa print:@"test"];

怎么样,是不是很容易搞混淆?

2. 再说说属性和成员变量的区别

Objective-C中有两种变量,一种叫成员变量,写在@interface {} 里面

@interface XXXViewController :UIViewController {

NSArray*m_array;

}

这种跟C++是一样的,只是C++有public,private,protected之分,而OC中没有这些修饰符,OC中的这种变量如果是写在头文件中泽默认是protected的,如果是写在m文件中则是private的。(OC中也有@public关键字,不过好像并没有什么用)

另一种叫属性,是写在@interface {} 外面的,类似于C++中的公有的成员变量,可以被对象外部访问

@property NSArray *array;

(其实,还有一种匿名类别中的属性,是不可以被对象外部访问的,这里为了避免混淆,先不介绍了)。编译器会将属性自动展开为一个带下划线前缀的同名的成员变量,并为其添加set 和get 方法,也就是说,你定义了一个名为array的属性,编译器会生成一个_array的成员变量,并生成了两个方法:

-(NSArray*)array;   

以及 -(void)setArray:(NSArray*)array; (这里遵循Cocoa命名的驼峰原则,第一个a大写了)

在Xcode6之前,要展开一个属性是需要在m文件中给属性添加@synthesize 关键字的,Xcode6之后不需要了,算是编译器的一个优化。

3.判断两个对象是否相等

   跟很多语言不同的是,OC中不能直接用==来判断两个对象是否相等,而是通过一个函数isEqual: 来判断(这点跟C++倒是一样),因为==判断的是对象的指针,而非对象的内容。但是判断对象是不是为空(nil)是可以直接用== 来的。不同类型的对象是不能判断是否相等的。

判断字符串是否为空也可以通过字符串的length属性是否等于0来判断,比如说要判断一个字符串obj是否为空,可以用 [obj isEqual:@""],或者obj.length == 0。 后台说的字符串为空一般是指@"", 而OC中的空是指nil, 如果在工作中你经常跟后台调试http接口的话,就要特别注意这一点。

4. 数据存储

iOS中有一个沙盒的概念,应用程序产生的数据只能存到对应的沙盒中,所谓沙盒就是一个限制了访问权限的文件夹,应用程序彼此之间不能相互访问(除非提供扩展,或者系统应用访问你的程序),以最大程度的减少数据污染和泄漏的可能性。应用程序有几个常用的文件夹:Document、 Temp、 Cache , 其中Document用来存用户自己创建的数据,这种数据一般比较重要,属于不可再生的,开启了iCloud之后可以被系统自动备份到云端;Cache和Temp用来存临时的数据,比如HTTP缓存,或者下载的图片等;  

另一个值得注意的问题就是数据库的访问。可能是因为之前写windows客户端经常用mysql的缘故吧,我还天真的以为iOS程序可以直接访问mysql,于是从网上下了一个mysql的库,本地建好了表,还写了一些SQL语句,等真正运行的时候发现编译出错,才知道原来iOS根本不支持mysql。 iOS本地支持的数据库只有sqlite,这个东东可以认为是一个单机版的mysql,语法跟mysql差不多,Cocoa SDK中有一套API可以操作他,但是非常难用,一般都会使用FMDB等第三方的代码库来操作。至于为什么iOS不能支持mysql,我到现在也没搞明白,可能mysql是分布式的吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 01-常量与变量 学习swift第一步打印Hello World print("Hello World") swi...
    iOS_恒仔阅读 10,653评论 2 19
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 8,556评论 3 25
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,386评论 30 472
  • 上续 换了工作虽然工资不高,但是得到老板,同事的认可。什么杂活,累活都抢着做。做了一段时间也得心应手。就在这段时间...
    an平安的福阅读 1,904评论 0 1
  • 公元tanX年,古战场,乌江边。 江边有一个村子,唤作霸王村,因当年楚霸王项羽在此处兵败自刎而得名。话说霸王少年...
    86bb5e6576b4阅读 2,144评论 0 0