项目中最难的问题ios_ios 面试 项目中遇到的问题 - CSDN
  • 第一个问题:如果你的项目中有很多个类,都需要归档和解档,你该怎么办。。第二个问题:如何给NSArray NSNumber 这些类簇的前端类增加一个属性第三个问题:写项目的时候,一般服务器的接口,或者一些经常用到得字符...

    第一个问题:如果你的项目中有很多个类,都需要归档和解档,你该怎么办。。

    第二个问题:如何给NSArray NSNumber 这些类簇的前端类增加一个属性

    第三个问题:写项目的时候,一般服务器的接口,或者一些经常用到得字符串,他问我应该放在哪里,我说放在预编译文件里面,他说不好。。说应该放在外部文件中,然后用extern。这个我不太明白。

    第四个问题:你用过真机测试吧,给我概述一下数据签名

    于是,今天下去之后上网搜了一下资料,决定把着四个问题解决掉

    1. 先说第一个问题。第一个问题,我想到的就是给需要归档和解档的类设置一个父类,在父类里面实现NSCoding的协议,可是每个子类的属性都不一样,,那该怎么办呢??在网上查了一下,看到一篇自动归档和解档的文章,于是就试着文章上的代码敲了一下果然成了。在父类里面实现如下代码即可,用的是运行时概念
      (id)initWithCoder:(NSCoder *)aDecoder {
        if (self = [super init]) {
            Class c = self.class;
            //截取类和父类的成员变量
            while (c&&c!=[NSObject class]) {
                unsigned int count = 0;
                Ivar *ivars = class_copyIvarList(c, &count);
                for (int i = 0; i<count; i++) {
                    NSString *key = [NSString stringWithUTF8String:ivar_getName(ivars[i])];
                    id value = [aDecoder decodeObjectForKey:key];
                    [self setValue:value forKey:key];
                }
                //获得c的父类
                c = [c superclass];
                free(ivars);
            }
        }
        return self;
    }
    
      (void)encodeWithCoder:(NSCoder *)aCoder {
        Class c = self.class;
        while (c && c!=[NSObject class]) {
            unsigned int count = 0;
            Ivar *ivars = class_copyIvarList(c, &count);
            for (int i = 0;  i< count ; i++) {
                Ivar ivar = ivars[i];
                NSString *key = [NSString stringWithUTF8String:ivar_getName(ivar)];
                id value = [self valueForKey:key];
                [aCoder encodeObject:value forKey:key];
            }
            c = [c superclass];
            free(ivars);
        }
    }

    其实这段代码,我还是不太懂什么意思,后续在努力研究研究把。。
    2. 第二个问也是要用到运行时,我只能说我对运行时了解的太少了。。。
    在网上查了之后,发现iOS中有一种能动态添加属性的方法:关联

    关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。
    关联特性只有在Mac OS X V10.6以及以后的版本上才是可用的。
    在类的定义之外为类增加额外的存储空间
    使用关联,我们可以不用修改类的定义而为其对象增加存储空间。这在我们无法访问到类的源码的时候或者是考虑到二进制兼容性的时候是非常有用。
    关联是基于关键字的,因此,我们可以为任何对象增加任意多的关联,每个都使用不同的关键字即可。关联是可以保证被关联的对象在关联对象的整个生命周期都是可用的(在垃圾自动回收环境下也不会导致资源不可回收)。
    创建关联
    创建关联要使用到Objective-C的运行时函数:objc_setAssociatedObject来把一个对象与另外一个对象进行关联。该函数需要四个参数:源对象,关键字,关联的对象和一个关联策略。当然,此处的关键字和关联策略是需要进一步讨论的。
    ■ 关键字是一个void类型的指针。每一个关联的关键字必须是唯一的。通常都是会采用静态变量来作为关键字。
    ■ 关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的;还有这种关联是原子的还是非原子的。这里的关联策略和声明属性时的很类似。这种关联策略是通过使用预先定义好的常量来表示的
    下面举一个给NSArray 增加一个name属性的例子:

    #import <Foundation/Foundation.h>
    
    @interface NSArray (Associate)
    
    @property (nonatomic,copy) NSString *name;
    
    @end
    #import "NSArray+Associate.h"
    
    #import <objc/runtime.h>
    
    @implementation NSArray (Associate)
    @dynamic name;
    static char nameKey;
    
    - (void)setName:(NSString *)name {
        objc_setAssociatedObject(self, &nameKey, name, OBJC_ASSOCIATION_COPY);
    }
    
    - (NSString *)name {
        return objc_getAssociatedObject(self, &nameKey);
    }
    
    @end

    这个还比较好理解,学习了之后就豁然开朗了。

    1. 第三个问题我实在体会不到,就先不写了
    2. 第四个问题,明天再研究吧。。。
    展开全文
  • iOS】GitHub上受欢迎的iOS开源项目(二) 博客分类: iphone   “每一次的改变总意味着新的开始。”这句话用在iOS上可谓是再合适不过的了。GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发...


     

    “每一次的改变总意味着新的开始。”这句话用在iOS上可谓是再合适不过的了。GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目已经被弃用,即使曾经的它很受开发者喜爱,有的项目则继续发扬光大,新项目更是层出不穷。在本文中,我们将继续为大家介绍20个在GitHub上非常受开发者欢迎的iOS开源项目,在这些项目中,有哪些是你经常使用的?又有哪些是你曾经使用过的?

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    21. SSToolkit

    SSToolkit可以说是iOS开发者最常使用的工具类之一,该开源项目提供了一个完整的iOS类库集合,用于解决iOS开发者在开发过程中常碰到的一些问题,比如追踪一款设备是否具有视网膜显示屏或是否能剪裁图片,包含SSCollectionView、SSGradientView、SSSwitch等诸多非常方便的类。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    如果想要对SSToolkit作进一步了解,可以在iPad/iPhone上使用SSToolkit的Demo应用SSCatalog。获取更多信息,可直接登陆S.S. TOOLKIT

    22. XMPPFramework

    XMPPFramework是一个使用Objective-C编写的用于Mac/iOS开发的XMPP框架,它提供了一个RFC-3920(XMPP标准)核心实现,通过某些特定工具读写XML。XMPPFramework有着非常丰富的建立在模块化架构之上的XEP扩展,开发者可以将其直接插入到代码中,使用GCD构成,即使是在非常老旧的iPhone或12核Mac Pro上,它都能高效运转。

    23. MGSplitViewController

    为了方面开发,苹果iOS SDK提供了UISplitViewController用于iPad左右分栏界面显示,但对于开发者而言,UISplitViewController使用起来并不方便,在开发过程中,总会遇到许多问题。于是,天才的iOS开发者Matt Gemmell在GitHub上发起了一个名为MGSplitViewController的开源UISplitView实现,它比苹果官方UI组件所提供的分栏类功能更加丰富。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    最初Matt编写MGSplitViewController只是为了方便自己使用,但最终Matt决定将其开源,供所有iOS开发者使用。如果想要了解更多关于MGSplitViewController的信息,可直接登陆Matt Gemmell博客查看,也可点击链接,查看视频演示(需)。

    24. CocoaLumberjack

    CocoaLumberjack集快、简单、强大、灵活于一身,和log4j等其他非常受开发者欢迎的日志框架的概念类似,专为Objective-C设计,用于iOS和Mac,拥有多线程、GCD(如果可用)、无锁原子操作和Objective-C运行时的动态特性。

    25. PSTCollectionView

    PSTCollectionView是用于iOS 4.3及其以上版本中的UICollectionView的100%开源API兼容替代品。如果想要使用UICollectionView,但仍然需要支持老版本的iOS,那么这个项目你一定会非常喜欢。如果想要始终使用PSTCollectionView,使用PSTCollectionView作为类名称即可。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    当然,如果你想在iOS 4.3/5.x上使用PSTCollectionView,但在iOS 6上使用UICollectionView,可以在所有UICollectionView类上添加PS,以获得对老版iOS的自动支持,这样就可以随心所欲如你所愿地使用PSUICollectionView。

    26. CocoaHTTPServer

    CocoaHTTPServer是一个用于Mac OS X或iOS应用的轻量级、可嵌入的HTTP服务器框架。有时候开发者需要在他们的App中内嵌一个HTTP服务器。无论是具有远程监控功能的服务器应用,还是使用HTTP进行后端通信的桌面应用,或者是提供无线访问文档功能的iOS应用,CocoaHTTPServer都能满足你的开发要求。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    CocoaHTTPServer提供如下功能:

     

    • 支持Bonjour广播内建;
    • 支持IPv4、IPv6;
    • 异步网络使用GCD和标准套接口;
    • 密码保护支持;
    • SSL/TLS加密支持;
    • 快速、高效;
    • 伸缩性强;
    • 大量注释代码;
    • 非常容易扩展;
    • 还支持WebDAV。

     

    27. PushSharp

    在应用开发中,给App推送通知是很常见的方式。PushSharp正是这样一个能够实现向iOS(iPhone/iPad APNS)、Android(C2DM和GCM)、Windows Phone、Windows 8、BlackBerry(PAP)和Amazon(ADM)等多种操作系统推送消息通知的开源C#服务器端库。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    主要特性:

     

    • 支持多平台消息推送;
    • API能够很流畅地为不同平台创建通知;
    • 自适应信息频道(自动增加或减少消息链接);
    • 使用异步代码,基于Event为导向调用类库;
    • 100%代码托管,兼容Mono框架;

     

    28. HockeyKit

    此前在GitHub上“最受欢迎的Android开源项目”系列文章(一)中,我们曾对HockeyKit进行了详细的介绍。HockeyKit是一个用于iOS和Android下App更新的开发包,无论是iOS还是Android应用开发,它都深受开发者喜爱。

    29. JTRevealSidebarDemo

    JTRevealSidebarDemo是一个能够实现类似于Facebook客户端和Path应用的视图切换效果的Objective-C库模板,其目的在于为开发者提供一个真正灵活的、可重用的解决方案。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    JTRevealSidebarDemo可用于iOS 4.3和5.0应用开发,示例代码使用ARC构建,但该库本身则兼容ARC和非ARC。

    30. PKRevealController

    PKRevealController是对ZUUIRevealController的进化,ZUUIRevealController能够实现类似于Facebook客户端的视图横向切换效果。而PKRevealController则是一个iOS视图控制器的集合,能够让你实现多重控制器切换,非常灵活。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    31. QuincyKit

    QuincyKit是一个为iOS和Mac OS X提供的程序崩溃报告管理解决方案,提供客户端开发包以及基于PHP开发的服务器平台。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    主要功能:

     

    • (自动)向开发者数据库发送崩溃报告;
    • 由用户决定每次崩溃是否发送数据或总是发送;
    • 用户可对是否选择提供E-mail地址等额外信息进行设置;
    • 如果崩溃是已知的,向用户提供即时反馈,并在接下来的更新中进行修复。
    详情请参考:QuincyKit官网

     

    32. PSStackedView

    PSStackedView能够将你的UIViewControllers堆叠起来,实现了类似于Twitter iPad版应用效果的界面,项目发起人Peter Steinberger表示,PSStackedView的灵感正是来自于Twitter iPad的UI。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    为了开发非常受欢迎的奥地利TV应用3MobileTV的iPad版,Peter创作了PSStackedView,开发者可以直接登陆App Store下载该应用。PSStackedView可运行在iPad和iPhone上,但相对而言,更适合用在iPad上。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    33. Chameleon

    作为一名iOS开发者,你应该对苹果官方用于开发iPhone、iPod和iPad应用的UIKit框架很熟悉。Chameleon是一个完全独立的可以直接替代UIKit在Mac OS X上运行的框架,和UIKit唯一的共性就是公共类和方法名称。在大多数情况下,开发者不需要改动任何代码,即可直接在Mac上运行所开发的iOS应用。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    Chameleon的源代码是基于苹果的文档而来,并没有使用到任何私有API或其他未经Mac App Store批准的技术。如果想要了解更多关于Chameleon的信息,可直接登陆ChameleonProject网站查看。

    34. cocos2d-iphone-extensions

    Cocos2D-iPhone-Extensions整合了非常多的优秀的Cocos2D-iPhone引擎第三方扩展。该项目并没有对Cocos2D进行任何改变,只是将新功能源源不断地加入到Cocos2D-iPhone-Extensions中,供开发者使用。

    35. DCIntrospect

    Introspect是一个很小的iOS工具集,用于帮助开发者对使用UIKit构建的用户界面进行调试。特别适用于动态创建UI布局、改变运行时,还能通过寻找透明视图优化应用性能,并避免不必要的重绘视图。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    36. PSCollectionView

    PSCollectionView是一个能够实现Pinterest风格的瀑布流视图显示效果的iOS滚动组件,可用于类似的UITableView,支持显示图片和文字。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现 [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    项目发起人Peter Shih在自己的iPhone/iPad应用Lunchbox中使用了PSCollectionView源代码,开发者可以在App Store中免费下载该应用。

    37. SDURLCache

    NSURLCache及其子类提供了很多高级接口用于处理缓存,但如果你想在自己的iPhone应用中通过HTTP请求的方式将缓存存储到磁盘中,推荐使用SDURLCache。Peter Steinberger在GitHub上托管的这个SDURLCache项目是Olivier Poitrey的SDURLCache的一个分支,支持iOS 5以下版本系统。

    38. FastPdfKit

    该开源库包含着FastPdfKit iOS库的一些示例项目。FastPdfKit是一个能够让你在iOS应用中显示PDF文档的开发类库,其最大的特点就是加载PDF文档速度特别快。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    详情请参考:FastPdfKit官网

    39. KKGridView

    KKGridView是一个高性能的iOS表格组件,但自WWDC 2012大会上苹果推出了相关的解决方案之后,KKGridView也就逐渐停止使用了。每逢iOS系统更新,iOS开源项目势必也会发生新一轮的改变,至于在颠覆了苹果以往设计观的iOS 7发布之后,iOS开源项目又会发生哪些改变?还要看天才的开发者们!

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    40. MGBox2

    MGBox2能够实现非常酷的列表交互效果,使用最少代码,即可快速创建各种布局效果的iOS表格、网格,支持新增和删除网格,动态添加或删除列表,在表格中加入多行文字、图片等,支持手势识别和自定义事件。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    分享到:
    参考知识库
    Android知识库35105  关注 | 3137  收录
    React知识库2740  关注 | 393  收录
    人工智能基础知识库13947  关注 | 206  收录
    Java 知识库28453  关注 | 3746  收录
    评论
    展开全文
  • 一、客户端发送的请求数量和服务端接收的数量不一致。原因可能是服务端并发请求数量设置的过小。...原因就是IOS绘机制的问题。 四、利用tableView的headerViewForSection:方法获取headerView时一直是nil。原因应
    一、客户端发送的请求数量和服务端接收的数量不一致。原因可能是服务端并发请求数量设置的过小。
    二、利用循环请求数据时小概率的引起程序崩溃。原因可能是两个线程同时对一个数据源进行了操作。
    三、绘制分时、k线时线条模糊,举行时会出现四条边不一样粗细。原因就是IOS绘机制的问题。
    四、利用tableView的headerViewForSection:方法获取headerView时一直是nil。原因应该是设置headerView时利用- (UIView *)tableView: viewForHeaderInSection:的代理方法返回的UIView应该是UITableViewHeaderFooterView类型的,很多时候被他的返回值(UIView *)误导了。
    五、由于项目比较大,页面多而且复杂,有时就需要从当前的responder通过nextResponder(一个甚至多个)找到深层次的VeiwController。
    六、项目中需要用到循环刷新数据,利用NSTimer来实现,但是想在VC销毁时停掉timer(就是在dealloc方法中停掉),结果发现dealloc根本不调用,原本以为是引用计数没有减到0,可是问题不在此,而就在NSTimer这。结果在viewDidDisappear:停掉timer后就调用dealloc方法了。
    七、利用viewWithTag:寻找子View时,出现绝对性的错误,对象类型都不对。问题出现在设置的tag有重复,要注意的是子View在包括子View的子View的tag都不可以重复,所以建议另外创建一个文件专门设定tag,就像android中的R.java文件一样来确保tag的唯一。
    展开全文
  • h5项目在内嵌在app应用,在ios9白屏,想到的解决方案 使用vconsole(腾讯开发的)一个插件,在手机应用查看控制台信息 在ios9的safari浏览器打开一个白屏页面的链接,查看报错信息 实际用到的是第二种方式 ...

    h5项目在内嵌在app应用中,在ios9白屏,想到的解决方案

    1. 使用vconsole(腾讯开发的)一个插件,在手机应用中查看控制台信息
    2. 在ios9的safari浏览器中打开一个白屏页面的链接,查看报错信息
    实际用到的是第二种方式
    因为白屏,啥都没有也就没有vconsole的按钮,但是vconsole还是很有用的,拿个小本本记下来
    复制代码

    1.在safari控制台发现报错信息

    SyntaxError: Use of const in strict mode.
    复制代码

    搜索结果

    原来在webpack-dev-server的2.7.0以上版本中,在webpack-dev-server下的client/index.js文件中使用了es6的语法,而我们在使用babel-loader解析js的时候会将node_modules下的文件exculde,这就导致了报错!!! 解决方案

    module: {
        rules: [
            {
                test: /.js$/,
                loader: 'babel-loader',
                include:[resolve('src'), resolve('node_modules/webpack_dev_server/client')]
            }
        ]
        
    }
    复制代码

    在解决了这个问题后,我的h5页面就可以正常展示啦,开心 2. 展示的样式不对,这个主要是position: unset样式不支持,改成position: initial

    1. 获取viewport的方式不对
    // 这种方式在iso9下并不支持
    document.getElementsByTagName('meta').viewport
    // 改用
    // 1. 在  <meta name='viewport' id='viewport' ...> 添加id为viewport
    // 2. 通过getElementById获取对象,通过setAttribute设置content内容
    document.getElementById('viewport').setAttribute('content', '。。。')
    复制代码
    1. vue在ios9系统下,数组在使用for in时,会循环两遍的问题
    // 将for in改成for循环
    for(let i = 0; i < items.length; i++){
        ...
    }
    复制代码

    以上

    在此之前兼容问题很少弄,所以开始时,有些方,导致解决问题用时很长,用小本本记下来,以后按照流程走,不能方,要稳!

    展开全文
  • 最近在做一个vue项目,使用到了input搜索框,之前一直没注意到此问题,在android中使用一切正常,最近在测试ios中获取焦点没有光标,而且输入有间断,输入一个词之后必须重新点击input一次才能输入,找了好久才想起...
  • Ios项目中引入pod工具管理三方库文件的步骤: 一、安装 安装CocoaPods 我的环境为Mac OS X 10.9.1,安装CocoaPods之前,先确保本地有Ruby环境,因为CocoaPods运行于Ruby之上,默认情况下,Mac是自带了Ruby...
  • ios 浮点数精度问题

    2016-03-31 15:11:09
    之前一直在写Java,涉及到精度问题,一般用java的BigDecimal就能解决,最近遇到ios项目中一些精度问题,我们平时用的最多的应该是float,double之类的,当然ios还有一个类CGFloat,这个类包含了float和double,然后...
  • 1. 近期发现项目中关于输入框在ios上点击失效,多次点击才可以获取焦点的问题,那么导致这个问题所在的原因是因为项目中引入了FastClick 这个是解决移动端延迟300毫秒的优化 当使用FastClick 时,输入框在ios上点击...
  • 由于公司项目的需要,需要将unity3D工程跟原生工程合并, 所以不得不接触unity3D, 本文是将unity3D导出的iOS代码移植到Xcode本地建的工程, 上代码: 首先,总体来说,总的步骤分为两大块, 第一,你需要从unity3D...
  • 最近一个项目中碰到一个问题: 在一个页面点击一个按钮会出现一个弹出框,这个弹出框给了fixed定位,并且宽高都等于100%,在这个弹出框有包含input输入框的div,这个div未做定位设置。页面操作中看不出来什么...
  • unity项目是横屏项目,iOS项目是竖屏项目。现在整合到一起要设置xcode支持横屏, 然后就会出现不知名的崩溃。 ![图片说明](https://img-ask.csdn.net/upload/201703/29/1490781563_901243.png)
  • 造成ios9一下页面空白问题,个人遇到的是项目npm run build之后,项目里es6没有转成es5造成的。 vue-cli构建的本身已经配置好babel,es6的转码,但是还遇到这个问题。 那么可能的原因是引入的文件没有转码,像我...
  • 由于引入fastclick导致ios端input、textarea输入框难以点击聚焦,解决方案如下: 找到项目中的fastclick依赖或在main.js改写fastclick的focus实现。 改过之后真机测试,问题得到解决。 ...
  • ios中,输入框被软键盘遮住,这是众所周知的bug,那么如何来解决这个问题呢?最近的项目中就遇到了这个问题,然后经过高人指点解决了这个问题,以及遇到的另外一些问题。 首先我们先来说说弹出软键盘,在ios中,...
  • vue项目ios端出现滑动不流畅问题,我的解决方法是: 在对应的组件的外层div上加上这样的样式: .box{ overflow-y: scroll; touch-action: pan-y; -webkit-overflow-scrolling: touch; } 然后在外层再套...
  • iOS平台内存常见问题 作为iOS平台的开发者,是否曾经为内存问题而苦恼过?内存莫名的持续增长,程序莫名的crash,难以发现的内存泄漏,这些都是iOS平台内存相关的常见问题;本文将会详细介绍iOS平台的内存管理机制...
  • ios中iframe的显示问题

    2017-12-21 02:45:20
    问题就是,在移动端,我们开发的时候页面显示是上面是一个topbar,里面是一个返回按钮和菜单栏,下面就是iframe显示加载的页面了,但是在安卓中可以正常显示,但是在ios中,首先会显示topbar,第二部会显示iframe,但是等到...
  • 每个iOS开发者在做过一些项目之后,都会有自己的一些总结和积累,都会封装一些自己用得顺手的控件,俗称造车的轮子,关于UI层面的,我是建议少用甚至不用第三方的,虽然有些第三方的UI控件确实功能很强大,也很全面...
  • MUI在ios中的一些问题

    2018-06-08 10:52:49
    MUI开发ios跟Android是存在差异,目前碰到的问题有以下几种 1,IOS跟Adroid在margin值时,存在差异,这时候只要让手机判断是IOS还是Android即可,这里给出两种方式判断 console.log(mui.os),可以看到//第一种...
  • iOS测试项目是否存在内存泄露
1 2 3 4 5 ... 20
收藏数 151,366
精华内容 60,546
关键字:

项目中最难的问题ios