objective-c - 求教iOS开发知识

 高粱_ 发布于 2022-10-29 11:20

做iPhone/iPad需要哪些知识??

洒家只知道要会 Objective-c,
熟悉 iOS SDK
工具是 xcode

基础的 数据结构、算法、多线程、Socket、XML ,这些应该也是要掌握的,
还有些啥?

或者,能不能细化一下Objective-c的重要技术点?谢谢。。

4 个回答
  • 一张图告诉你!请阅读文章:http://www.henishuo.com/ios-study-route/

    2022-11-12 01:48 回答
  • 建议1,不系统学习
    建议2,从写Hello World开始,一个一个app的写,用到什么学什么
    建议3,市面上没有一本书是靠谱的
    建议4,看官方文档和sample code

    2022-11-12 01:48 回答
  • 第一层:objective-c语法 三天即可修炼成功
    第二层:民工UI:UIView、UILabel、UIImageView、UITableView、UINavigationController、UITabBarViewController的用法。视资质要一个月到两个月时间修炼。
    第三层:各功能API:网络请求、持久化、通讯录、GPS、邮件API、各种API。半年
    第四层:UI进阶:旋转屏幕、核心动画、自定义描绘视图、绘图上下文等。半年
    第五层:高级技能:运行时、cocos、OpenGLES等。目前尚未修炼完成,尚不知所需日期。

    2022-11-12 01:48 回答
  • 作为一个半路转学ios开发的开发者,从我两个月的开发经历来看,objective-c一点也不难。我的开发的程序经历了如下的变迁,我也趁机来总结下得失

    最弱智的hello world

    从xcode新建一个project,然后打开窗口编辑器(Interface Builder,简称IB),拖入一个UILabel组件,写上"Hello World",这样就算完了。

    了解代码的组成

    虽然它的名字叫"objective-c",但似乎一点也不同于我以前写过的c语言,里面充满了无数让菜鸟迷惑的潜规则。

    1. 为什么用#import而不用#include?
    2. @property是什么东西?它括号里面的(strong, nonatomic)又会发生什么奇怪的化学反应?为什么我在@interface里声明了属性,还要再@property?它和@synthesize又有什么关系?

    这一阶段基本上集中了很多小白的问题,幸运的是这些问题都很容易在网上找到答案,而且如果你有其它的语言基础的话也会很容易理解这些语法。

    我在这一阶段写出的代码基本惨不忍睹,所有的代码都放在一个controller里,一个是因为我懒,另一个是因为我还没有掌握objective-c开发世界里的编码风格,所以索性就不要风格了。你的代码里可能充满了IBOutlet或者IBAction

    不过只要你的代码能够工作,那么一切都是值得的。

    初窥精髓

    在cocoa框架里的一大精髓就是delegate,中文翻译为"委托"模式(本人自创直译其为"代理"模式)。虽然这一模式并不是cocoa的独创,但也是它运用的最好的地方之一。delegate模式解决了controllerview之间的交互问题。

    在我写代码的时候,往往发现只要seDelegate,就会发生很多很美妙的事情。另外你会发现,ios提过的这些基本组件已经无法满足你对交互的要求了,这时候你可能需要开始扩展它的一些基本组件。

    扩展它的基本组件是件很简单的事情,sdk中也预留了很多接口供我们override。一般这时候的你看着以前自己写的丑陋的代码,会忍不住开始重构它,放手去重构吧。

    得心应手

    其实了解了objective-c世界的一些潜规则以后,除了对它API的掌握,它就基本已经成为一种普通的工具语言了。

    但要注意的是,xcode 4以后引入了ARC,也就是自动引用计数这个玩意,并且它默认是打开的。可能会给你造成一些困扰。很多初学者会担心交由系统管理内存会造成内存的浪费,其实了解它的原理后,发现它的实现非常简单,其实就是当一个对象的没有人引用时,系统就自动把它release掉。而交给系统来处理也可以避免内存碎片的形成,但如果你需要频繁在一块内存区域读写内存,比如自己实现的消息队列之类的,建议自己通过struct来实现。

    但是如果你定义这样一个struct

    typedef struct _Test {
    
        NSString *name;
    
    } Test;

    编译器会无情的告诉你,在struct里无法引用objective-c的对象,为什么?因为ARC无法控制到struct里的引用计数。但是如果你非要在struct里引用一个对象怎么办,你可以使用void *来保存一个指针

    typedef struct _Test {
        void *namePtr;
    } Test;
    
    // malloc的指针也不会被arc, 注意自己释放
    Test test = (Test *)malloc(sizeof(Test));
    test.namePtr = (__bridge void *)[NSString stringWithString:@"Hello"];

    但有一个问题,在上面的代码中[NSString stringWithString:@"Hello"]这只是个临时变量,虽然它被struct的指针指向了,但是前面说到了,这不会引起ARC的引用计数。

    那么就是说ARC会认为没有人引用这个变量,如果不出意外,这段代码执行玩以后,这片内存会被系统回收。如果你再次调用这个指针指向的内存,只会得到一个EXC_BAD_ACCESS错误。

    解决方法其实很简单,我们可以强制让ARC计数,比如在当前的@interface里设置一个变量指向这个string,这样它就不会被释放了

    @interface TestObj : NSObject {
        NSString *name;
    }
    
    - (void)initName
    {
        name = [NSString stringWithString:@"Hello"];    // 强制引用
        Test test = (Test *)malloc(sizeof(Test));
        test.namePtr = (__bridge void *)name;
    }

    OK, 说了这么多比较乱,最后还吐槽了下ARC。最后的结论就是上手是很快的,但学好也需要自己钻研。

    2022-11-12 01:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有