gag*_*rma 23 iphone cocoa-touch objective-c
我是Objective-C的新手,我经历了很多主题,我应该更加重视开发iPhone应用程序的关键概念是什么?
Mos*_*she 54
有许多概念构成了iOS开发的基础知识.有编码模式,技术和一些你应该知道的一般花絮.
编码模式:
键值观察(KVO):通过向"目标"对象注册"观察者",允许一个对象响应另一个对象属性的更改.有关KVO的更多信息,请参阅Apple的 Key-Value Observing Programming Guide.
模型视图控制器模式:在模型视图中,控制器模式(MVC)对象通常适合三种角色之一.您拥有模型,这是最基本的数据级别.(或者,更准确地说,数据是如何构建的.)您拥有View,这是用户在屏幕上看到的内容.最后,您有Controller,它在模型和视图之间进行协调.该控制器是你的业务逻辑一般无二.Apple也有关于MVC的文档.
Singleton模式: Singleton类(这是一个矛盾的"单例类")是一类只能在一个应用程序中有一个实例的类.单身人士适合"工厂阶级",或者你不想要两个人的物品.的UIDevice类,例如,是一个单独的类.(你的iPhone不是iPad和iPhone同时使用,现在是吗?)在iOS SDK中,单例类通常有一个特殊的初始化程序.而不是通常的[[Class alloc] init]单身人士经常使用[SingletonClass sharedInstance].("共享"实例,因为实例在应用程序中"共享".)请注意,Singleton类在内存管理方面的工作方式略有不同.
编码技巧:
委派:iOS SDK中的许多对象都有委托对象,这些对象响应他们"委托"的对象的某些"事件".例如,你可以有一个UIPickerView(滚动轮上有一堆选择).当用户选择日期时,委托(将与UIPickerView不同的对象)将实现– pickerView:didSelectRow:inComponent:,这将允许该对象执行某些操作以响应该操作.
内存管理:与许多语言不同,无论是Java,Javascript还是介于两者之间的任何东西,通常都会为您管理内存.在iOS上,Objective-C的并没有做到这一点.您需要跟踪所有对象并在完成后释放它们.经验法则是,每一个alloc,retain,new,和copy,你必须有一个相应的release,或autorelease.(关于自动释放的说明: 人们经常在理解上遇到麻烦autorelease.一般来说,本地"自动释放"对象保证在方法调用结束之前.不多也不少.当然,如果你将对象留在别处,它从那时起仍然会有参考.)
ARC:通过iOS 5 SDK,Apple推出了自动引用计数.即使您计划使用手动引用计数,了解其工作原理也很重要.您永远不知道何时会遇到需要使用的ARCified代码.
数据持久性:许多入门的人在启动之间保存数据方面也遇到了挑战.您有三种选择,具体取决于数据类型.您可以使用NSUserDefaults,文档目录(或App的目录层次结构中的一些其他文件夹或Core Data.您也可以将它们相互结合使用,因为它们不是互斥的.
基本概念:
IBOutlets和IBActions:IBAction并且IBOutlet是typedef为了void.IBAction方法返回void并标记为,IBAction以便Interface Builder可以允许您将它们附加到NIB文件中的对象.IBOutlets是代码中的"占位符",用于允许您通过Objective-C代码设置属性或以其他方式与NIB文件中的对象进行交互.
@符号:@符号表示Objective-C常量,因为Objective-C是C之上的超集或框架.在C中,字符串常量将是"My string is cool.".在Objective-C这将是@"My string is cooler in Objective-C."所述的其它实例@中使用的符号C和Objective-C之间进行区分类似于关键字 @implementation,@property,@class和@end.
指针:Dave DeLong在他的回答中解释了这一点,但这也是确保你也知道的其他事情.
最后,我给你一个建议:
虽然你有StackOverflow,它确实是一个很好的资源,但是知道如何使用Apple文档.享受你的旅程,祝你好运入门!
祝好运!
这些不一定特定于iPhone开发,但没有它们,你将永远不会得到它.
指针 - 知道指针是什么.知道为什么我们需要动态分配的内存与静态分配的内存.(我知道这可能听起来微不足道,但根据我的经验,这是新手最麻烦的第一件事)这是因为你永远不会*处理Objective-C中的原始对象.你总是处理对象引用.(即,你永远不会处理一个NSString,但总是一个NSString *)但是,有些东西看起来像对象,但实际上并不是. NSRects是结构,它们可以堆栈分配. NSInteger只是typedef一个原始的int.如果你不知道指针是什么,那么你会疯狂地想知道什么时候你应该放入一个指针,*当你不是时.
内存管理 - iPhone没有垃圾回收.您必须手动管理您的记忆.接受并继续前进. Objective-C中的内存管理约定规则是微不足道的.记住它们,并始终记得使用它们.
*你唯一一次处理堆栈分配的对象就是块(^{ ... })或当你做一些非常狡猾的事情时.