iOS自学日记-第一天
来源:互联网 发布:淘宝联盟伴侣 编辑:程序博客网 时间:2024/06/08 10:31
之前学的是c/c++,现在在上安卓的课,也算是接触了一点java,嗯,那我就来自学一下ios开发吧(什么逻辑。。。)
首先,objective-c也是一门面向对象的语言,跟c有相同的地方,跟java也有相同的地方,毕竟一个是完全不面向对象的,一个是完全面向对象?
于是买了《OBJECTIVE-C PROGRAMMING》这本书来看,就第一天看来,看到第19章,也有三分之一了,书写的还是很不错的,翻译得也很不错。
书前13章都是回顾c语言的一切语法,有c语言基础的人估计很快就能上手,由于一段时间没有写c/c++了,还是花一个小时回顾一下吧。
嗯,总算要进入oc的部分了,在xcode创建一个os x 的命令行程序,那就先来个HelloWorld吧,咦,怎么创建好就可以跑啦:
//// main.m// helloWorld//// Created by xiaoye on 15/11/10.// Copyright © 2015年 xiaoye. All rights reserved.//#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); } return 0;}
oc创建的是.m 文件,就相当于c++的cpp文件或者java的.java文件,不过我记得matlab创建的命令文本也是.m文件?这两者之间有什么关系?不知道~~
首先不得不提一个基本oc程序的“标准框架”:
#import<Foundation/Foundation.h>:这个好像就是一个框架,以后我们封装了很多类就是通过这个框架装载在一起的,当然,本身系统很多类和方法都是通过这歌框架装载到一起的。
main函数当然就是程序的入口啦,main函数这个应该几乎是所有编程语言默认的程序入口了吧。
@autoreleasepool 按照它放的位置,它应该作用于它之后的所有对象和变量,它又在main函数这个位置,基本就是整个程序了。。。按照字面的意思,这个模块应该是自动释放某种东西的机制?百度了一下,看了几篇文章,大概是说@autoreleasepool能自动释放一些创建局部变量,对象什么的,看到有篇博客做了个测试,写一个for 循环,循环好像是500000次?每次创建两个实例,分别开@autoreleasepool和不加@autoreleasepool的区别,大概如下图(转载自土土哥的blog):
我总结了一下,这个跟oc的内存优化有关,有点类似ARC(Automatic Reference Counting),至于ARC,书是这样描述的:每次创建一个实例都是先创建一个指向这个实例的指针来“代表”它,当然,很多时候我们也会声明另外一个指针指向它,当一个实例还有指针指向它,那个说明这个实例还有用,当没有指针指向它时,说明已经不需要它了(你也找不到这个实例了。。),系统可以回收了,以前是需要程序员自己写这样的counter的,现在系统自带这个功能了。
NSLog大概就把它yy成c语言的printf吧,除了前面要加一个@(NSLog(@"....");),基本用法也差不多了吧。
然后就是%@和%s的区别,虽然都是代表字符串类型的格式,但是一个是NSSting的字符串,一个是string,算是普通的的字符串咯。
书学到现在,出现的都是NS开头的类,这是什么呢?其实就是NEXTSTEP的意思,是乔帮主第一次离开苹果时的公司的名字,oc提倡这些包里的类的名称都是用2~3个大写字母开头作为标示,仅仅是因为它经典。。所以用来做练习。
最后说一下这里的类?还是消息传递机制什么的。反正第一眼看到就懵了
//// main.m// bmitime//// Created by xiaoye on 15/11/10.// Copyright © 2015年 xiaoye. All rights reserved.//#import <Foundation/Foundation.h>#import "BNRPerson.h"int main(int argc, const char * argv[]) { @autoreleasepool { BNRPerson *mikey = [[BNRPerson alloc] init];//相当于c++的 class BNRPerson mikey; [mikey setWeightInKilos:20];//相当与c++的 mikey.setWeightInKilos(20); [mikey setHeightInmeters:50];<span style="font-family: 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif;">//相当与c++的 mikey.setWeightInKilos(20);</span> NSLog(@"mikey is %.2f meters tall and weighs %d kilograms",mikey.heightInMeters,[mikey weightInKilos]); } return 0;}BNRPerson.h:
//// BNRPerson.h// bmitime//// Created by xiaoye on 15/11/10.// Copyright © 2015年 xiaoye. All rights reserved.//#import <Foundation/Foundation.h>@interface BNRPerson : NSObject{ float _heightInMeters;//类的成员变量一般用“_”开头 int _weightInKilos;}- (float)heightInMeters;//类的方法以“-”开头,“:”后面跟形参;- (void)setHeightInmeters:(float)h;- (int)weightInKilos;- (void)setWeightInKilos:(int)w;- (float)bodyMassIndex;@end
BNRPerson.m:
//// BNRPerson.m// bmitime//// Created by xiaoye on 15/11/10.// Copyright © 2015年 xiaoye. All rights reserved.//#import "BNRPerson.h"@implementation BNRPerson- (float)heightInMeters{ return _heightInMeters;}-(void)setHeightInmeters:(float)h{ _heightInMeters = h;}-(int)weightInKilos{ return _weightInKilos;}-(void)setWeightInKilos:(int)w{ _weightInKilos = w;}-(float)bodyMassIndex{ return _weightInKilos / (_heightInMeters * _heightInMeters);}@end最后补充下:oc的self等于c++的this,只能这么说了。
- iOS自学日记-第一天
- IOS自学第一天
- iOS学习日记(第一天)
- iOS自学---彩票App第一天
- php自学第一天
- Spring自学第一天
- linux自学第一天
- android自学第一天。
- 自学struts2第一天
- JAVA自学第一天
- 自学第一天
- android自学第一天
- 自学Linux第一天
- python 自学 第一天
- 实习日记->第一天
- [反省日记] 第一天
- 学习日记第一天
- 第一天的日记
- Spring配置jar包详解
- Spring4 Jar包详解
- Spring 环境搭建
- iOS:解决Xcode升级后插件失效问题
- Struts2中的FilterDispatcher和StrutsPrepareAndExecuteFilter的区别
- iOS自学日记-第一天
- struts 2.3.20配置所需jar包
- Struts2中的ModelDriven机制及其运用
- spring与mybatis三种整合方法
- JAVA 中URL中文参数乱码的处理方法(汇总)
- 关于windows下IDE(以Codeblocks为准)输出AscII码。
- Java类实例初始化过程(必知)
- java类中调用servlet
- ndpi源码分析一--几个重要的结构体