重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
第一步:编程入门课
目前成都创新互联已为1000多家的企业提供了网站建设、域名、网页空间、网站托管维护、企业网站设计、阳泉网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
时间预计:4个星期
推荐看公开课,Udacity也行,网易公开课也行,自己找一个面对对象语言(一般是JAVA, C++, Python)的课。我是在网易公开课看的斯坦福的CS106A,学的JAVA。
如果你纯粹学iOS开发,不推荐看哈佛CS50,CS50是给CS系的学生介绍整个计算机世界的框架,讲的内容比较多,进度比较快,对iOS开发其实有点累赘了。(臣妾有点跟不上啊!!)
计划安排是一天一课,看课程要求的书(至少看完一本)及大部分作业。这一阶段重点不是语法,而是以下3个目标。
目标:
1. 让自己对编程这件事感到适应。
写hello world。
怎么写function, 怎么调用function。
全局变量,局部变量这类基本知识点。
都是基本的东西。看看书,写多两个程序就欧啦。
2. 掌握编程语言的基本要素。
编程语言4个要素:
a. 基本的数据类型:整数,实数,character, string, boolean
b. 基本的运算符号:+-×/++--那啥的
c. 怎样输入输出
d. 怎样控制程序:sequence,selection,loop
3. 了解编程范式
面对过程编程。
面向对象编程。
第二步:上手iOS!
时间预计:2星期
强烈推荐CS193P,老头子讲的超级好!我的很多东西(对象思维啥的)是在这里跟着做练习的时候才真正明白的(好啦,也可能是上一堂课练习做得少的原因)。如果等到9月应该itunes U上会开始教iOS 7了。网易公开课的是2010年iOS 5版的,前10堂课,也行。(iTunes U上有完整的课)
CS193P说有prerequisite,一开始被吓到,事实证明还是可以学下去的。头两节课一头雾水,没关系,把itunes U上的课件下载下来,把所有代码打出来,然后一个个元素对应之前学的语言匹配,再不懂先放着,继续学后边的,过几天打多点代码就懂了。
感觉学5、6堂课,一个星期左右就可以开始进入下一阶段自己做东西了。之后用啥学啥,每堂课都有主题的。速度慢点的同学们,这阶段跟我一样准备两个星期吧!
第三步:开发app!
时间预计:2星期(本人...1个半月,实在不好意思说出口)
这个时间就可长可短啦,还包括美工,交互啥的。坚持要用啥学啥的原则,其实就是知道iOS SDK都有什么组件,每个组件有什么function而已。stackoverflow, Github, apple sample code多上,搜索引擎多用。如果有个师傅,这个阶段真的是进步神速。
好的!不出意外,你的第一个app就这么新鲜出炉了!从今天开始,成为一个冷艳逼格高尚的iOS开发者吧!
self和super区别
self
是关键字
代表当前方法的调用者
如果是类方法:代表当前类
如果是对象方法:代表当前类的对象
super
编译器指令
[self message]和[super message]的实现
其实不管是self还是super真正调用的对象都是一样的,只是查找方法的位置不一样,self是从当前类结构中开始查找,super是从父类中查找,但方法真正的接受者都是当前类或者当前类的对象
[self message]:
会转化为objc_msgSend(id self,SEL _cmd)这个函数,在当前类结构中找到方法并且调用
[super message]
会转化为id objc_msgSendSuper(struct __rw_objc_super *super, SEL op, …)
,对比[self message]这里除了函数名加了super以外,第一个参数由self变成了一个结构体,下面让我们来解开这个结构体的真面目
struct __rw_objc_super {
struct objc_object *object; //代表当前类的对象
struct objc_object *superClass;
__rw_objc_super(struct objc_object *o, struct objc_object *s) : object(o), superClass(s) {}
};1234512345
这个结构体中有两个参数:object的对象和一个superClass的结构体指针,这里的object相当于上面的self
在执行[super message]时,会做下面的事
1. 编译器会先构造一个__rw_objc_super的结构体
2. 然后去superClass的方法列表中找方法
3. 找到之后由object调用。
所以当你用[self Class]和[super Class]打印类的时候,打印的都是同一个类,因为他们只是查找方法的位置不同,但是调用方法的类/对象是一样的.
为什要写self = [super init]?
因为在Xcode中,你输入init然后tab就会帮你补全这个方法,以至于我一直都忽略了为什么在[super init]之后还要赋值给self,然后进行判断,其实这和类簇有关系,我们不能保证init的内存和alloc出来的内存是同一块内存,像NSString在alloc和init之后的对象分别是NSPlaceholderString和__NSCFConstantString*造成[super init]之后的内存被改变,所以在[super init]之后是nil,因此我们不能保证alloc和init的是同一块内存,加上这样的判断是为了提高容错性,如果init成功就返回对象,否则返回nil.
iOS的键盘协议。
最常见的就是 UIReturnKeyNext 或者 UIReturnKeyDone。
分别就是右下角那个按键变成Next 和Done。
Next就是改变下一个响应者,Done就是完成,虚拟键盘收起。
至于中文英文就是看键盘啦。。中英文输入法。
有错误请指正,希望可以帮到您。
CGPoint在OC中是一个结构体,结构体一般采用内存对齐的方式分配。
1、结构体每个成员相对于结构体首地址的偏移量都是这个成员大小的整数倍,如果有需要,编译器会在成员之间加上填充字节。
2、结构体的总大小为结构体最宽成员大小的整数倍。
3、结构体变量的首地址能够被其最宽基本类型成员的大小所整除。
4、对于结构体成员属性中包含结构体变量的复合型结构体,在确定最宽基本类型成员时,应当包括复合类型成员的子成员。但在确定复合类型成员的偏移位置时则是将复合类型作为整体看待。
5、总结:结构体的大小等于最后一个成员的偏移量加上其大小再加上末尾的填充字节数目,即:sizeof(struct) = offsetof( last item) + sizeof (last item) + sizeof( trailing padding)
例1:
第1个成员相对结构体首地址的偏移量为0,是成员int i(长度为4)的整数倍。
第2个成员相对结构体首地址的偏移量为4,是成员char c (长度为1)的整倍。(因为结构体总大小为结构体最宽成员大小的整数位,所以如果此结构体只有这两个成员的话,会在char c后添加3个填充字节,但现在有3个成员,所以不需要填充。)
第3个成员相对结构体首地址的偏移量为5,不是成员int x 的整数倍,所以在x前(或者说是c之后)填充3个字节,以使x的偏移量达到8而成为4的整数倍。所以这个结构体占内存大小为4+1+3+4。
例2:成员个数与每个成员类型都一个,只不过顺序不一样,占内存大小就不一样。
例3:复合型结构体
#pragma pack(n) //编译器将按钮N个字节对齐,设置结构体最宽成员大小(与实际最宽成员大小取小)。即结构体最终长度是n的整数倍。
#pragma pack() //取消自定义对齐方式。
#pragma pack(puch,1) //把原来对齐方式保存起来,并设置新的对齐方式。
#pragma pack(pop) //恢复之前保存的的对齐状态
Expected #pragma pack parameter to be '1', '2', '4', '8', or '16'
预期的#pragma pack参数为'1','2','4','8'或'16'
demo
设置对齐方式之后的内存计算
1、当设置的对齐长度小于当前成员长度时,成员偏移量是成员长度的整数倍。
2、当设置的对齐长度大于当前成员长度,并小于最长成员长度时,成员偏移量是设置的对齐长度的整数倍。
3、当设置的对齐长度大于最长成员长度时,成员成员偏移量按当前成员的实际大小对齐。
4、当设置的对齐长度小于实际最长成员长度时,结构体长度为设置的对齐长度的整数倍。
5、当设置的对齐长度大于或等于实际最长成员长度时,结构体长度为实际最长成员长度的整数倍。