一天执行一次ios_ios开发定时器先执行一次 间隔后再执行 - CSDN
精华内容
参与话题
  • iOS工程中一天只让进行一次的操作如何做? 整体思路:当进行操作的时候记录操作时间存在偏好设置当中,当再次点击的时候获取现在的时间然后和之前记录的时间进行比较。如果是一天那么就提示“今天已经操作过了”,...

    整体思路:当进行操作的时候记录操作时间存在偏好设置当中,当再次点击的时候获取现在的时间然后和之前记录的时间进行比较。如果是一天那么就提示“今天已经操作过了”,如果不是一天,那么可以正常操作,然后记录操作时间。如此循环往复。。。


    这里的一天只能操作一次指的是:

    (24点指的是凌晨12:00,也就是00:00)

    1、某一天任意时间点到24点之间。

    2、只要过了24点,立马可以进行第二次操作。

    3、假如你是23:59进行了一次操作,那么过了一分钟以后那就算第二天的了。所以可以进行第二次操作。

    4、所以记住:不是在24小时之内。而是某一天之内。


    首先我们要做的操作一般是网络请求,所以这里就拿网络请求为例,当我们点击按钮,触发方法inviteParent然后判断是否一天之内,如果不是,那么进行网络请求,那么此时今天的一次机会就用了。。。所以加入网络请求成功,那么此时记录现在的时间:

    主要方法:

    1. NSDate *nowDate = [NSDate date];
    2.                NSUserDefaults *dataUser = [NSUserDefaults standardUserDefaults];
    3.                [dataUser setObject:nowDate forKey:@"nowDate"];
    4.                [dataUser synchronize];

    代码示例:

    1. -(void)DoInviteParentsWithPersons:(NSArray *)array groups:(NSArray *)groupArray usersType:(NSInteger)userType
    2. {
    3.    SendNoticeBody *notice = [[SendNoticeBody alloc]init];
    4.    notice.msgType = 1;
    5.    notice.msgSrcType = 0;    
    6.    
    7.    NSDictionary *destInfo = nil;
    8.    destInfo = [[NSDictionary alloc]initWithObjectsAndKeys:notice.destPersons,@"person", nil];
    9.    
    10.    __weak __typeof(self)weakSelf = self;
    11.    
    12.    SendInvitePreNoticeSection *sec = [[SendInvitePreNoticeSection alloc]initWithMsgType:notice.msgType MsgSrcType:notice.msgSrcType DestInfo:destInfo NoticeContent:notice.msgContent SignName:notice.signName SourceId:notice.sourceId DepartFileIds:notice.fileIds ResultBlock:^(NSDictionary *dict, BOOL resultFlag, NSError *error) {
    13.        if (resultFlag) {
    14.            NSInteger resultCode = [dict JSONIntegerObjectForKey:@"resultCode"];
    15.            if (resultCode == 1) {
    16.                [self showSuccessHubContent:@"邀请发送成功"];
    17.                NSDate *nowDate = [NSDate date];
    18.                NSUserDefaults *dataUser = [NSUserDefaults standardUserDefaults];
    19.                [dataUser setObject:nowDate forKey:@"nowDate"];
    20.                [dataUser synchronize];
    21.            }else{
    22.                NSString *errmsg = [dict objectForKey:@"resultMsg"];
    23.                [self showErrorHubContent:errmsg];
    24.            }
    25.        }else{
    26.        }
    27.    }];
    28.    [sec exec];
    29.    
    30.  
    31. }

    那么当第二次进行按钮点击的时候,就会获取现在的时间和之前记录的时间进行对比,如果是同一天,那么就不可以再次点击了。提示“每日仅能批量邀请一次”,按钮的点击时间代码如下:

    1. -(void)inviteParent
    2. {
    3. //一天之内只能批量邀请一次
    4. NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    5. // NSLog(@"之前时间:%@", [userDefault objectForKey:@"nowDate"]);//之前存储的时间
    6. // NSLog(@"现在时间%@",[NSDate date]);//现在的时间
    7. NSDate *now = [NSDate date];
    8. NSDate *agoDate = [userDefault objectForKey:@"nowDate"];
    9. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    10. [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    11. NSString *ageDateString = [dateFormatter stringFromDate:agoDate];
    12. NSString *nowDateString = [dateFormatter stringFromDate:now];
    13. // NSLog(@"日期比较:之前:%@ 现在:%@",ageDateString,nowDateString);
    14. if ( [ageDateString isEqualToString:nowDateString]) {
    15. [self showErrorHubContent:@"每日仅能批量邀请一次"];
    16. }else
    17. {
    18. [self DoInviteParentsWithPersons:array groups:groupArray usersType:nil];
    19. }
    20. }

    主要代码:

    1. NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    2. // NSLog(@"之前时间:%@", [userDefault objectForKey:@"nowDate"]);//之前存储的时间
    3. // NSLog(@"现在时间%@",[NSDate date]);//现在的时间
    4. NSDate *now = [NSDate date];
    5. NSDate *agoDate = [userDefault objectForKey:@"nowDate"];
    6. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    7. [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    8. NSString *ageDateString = [dateFormatter stringFromDate:agoDate];
    9. NSString *nowDateString = [dateFormatter stringFromDate:now];
    10. // NSLog(@"日期比较:之前:%@ 现在:%@",ageDateString,nowDateString);
    11. if ( [ageDateString isEqualToString:nowDateString]) {
    12. [self showErrorHubContent:@"每日仅能批量邀请一次"];
    13. }else
    14. {
    15. [self DoInviteParentsWithPersons:array groups:groupArray usersType:nil];
    16. }

    

     6


    点击打开链接





    展开全文
  • iOS如何实现多个环境一次打包

    千次阅读 2017-07-17 14:04:45
    概述偶然看到个很有趣的问题:如何在ios环境下实现多个环境同时打包。谈到多环境,我想大多公司都至少有2-3个环境,比如Test环境,UAT(User Acceptance Test)用户验收测试环境,Release环境等等。当需要开发打多个...

    概述

    偶然看到一个很有趣的问题:如何在ios环境下实现多个环境同时打包。

    谈到多环境,我想大多公司都至少有2-3个环境,比如Test环境,UAT(User Acceptance Test)用户验收测试环境,Release环境等等。当需要开发打多个包的时候,一般常见做法就是直接代码里面修改环境变量,改完之后Archive一下就打包了。或者在App中内置一个切换的按钮,实现环境的切换。

    或者,你们公司已经搭建了Jenkins环境,利用Jenkins环境就可以给app来配置一下多个环境变量,之后Jenkins分别再不同环境下自动集成即可。

    那么如何实现ios的多环境打包呢?参照网上的一些方案这里做一个简单的总结。要实现多环境打包,现在主流的方案有三种(各有优劣)。
    1.利用Build Configuration来配置多环境
    2.利用xcconfig文件来配置多环境
    3.利用Targets来配置多环境

    Build Configuration方式

    做过ios开发的人都知道Build Configuration,系统默认提供2个环境,一个Debug,一个Release。这里,我们利用的就是Build Configuration给我们提供的配置功能来实现多环境打包。具体步骤如下:

    1,新建Build Configuration
    点击Project里面找到Configuration,然后选择添加一个Configuration,系统默认是2个,一个Debug,一个Release。这里我们需要选择是复制一个Debug还是Release。Release是不能调试程序,因为默认是屏蔽了可调试的一些参数。
    这里写图片描述

    这里我们新增一套环境:Configuration。在这一套包含了一些编译参数的配置集合。如果此时项目里面有cocopods的话,打开Configuration Set就会发现是如下的样子。
    这里写图片描述

    然后打开项目的pod文件,打开配置是会看到如下信息:
    这里写图片描述

    说明:pod安装完成之后会自动生成xcconfig文件,如果你手动新建这个xcconfig,然后把原来的debug和release对应的pod xcconfig文件内容复制进来,这样做是无效的,需要pod自己去生成xcconfig文件才能被识别到。

    新建完Build Configuration,这个时候需要新建pod里面对应的Build Configuration,要不然一会编译会报错。如果没用pod,可以忽略一下这一段。

    这里写图片描述

    2,新建Scheme

    这里写图片描述

    新建完成之后,我们就可以编辑刚刚新建的Scheme,我们可以把Run模式和Archive都改成新建Scheme。
    这里写图片描述
    注意:如果是使用了Git这些协同工具的同学这里还需要把刚刚新建的Scheme共享出去,否则其他人看不到这个Scheme。
    这里写图片描述

    3,新建User-defined Build Settings
    回到Project的Build Settings里面来,Add User-Defined Setting。
    这里写图片描述

    CustomAppBundleld是为了之后打包可以分开打成多个包,这里需要3个不同的Id,建议是直接在原来的Bundleld加上Scheme的名字即可。CustomProductName为app显示在手机上的名字,建议直接按环境给予描述,例如:测试(debug),线上(relase),UAT等。
    这里写图片描述
    需要注意的是:Pods的Build_DIR这些目录其实是Pods自己生成好的,之前执行过Pod install 之后,这里默认都是配置好的,不需要再改动了。

    4,修改info.plist文件 和 Images.xcassets
    打开info.plist文件。由于我们新添加了2个CustomAppBundleld 和 CustomProductName,这里我们需要把info.plist里面的Bundle display name修改成我们自定义的这个字典。编译过程中,编译器会根据我们设置好的Scheme去自己选择Debug,Release,TestRelease分别对应的ProductName。
    这里写图片描述
    这里写图片描述

    为了方便区分不同的环境,你还可以对不同环境下App Icon,名字等做一个修改。

    既然我们已经新建了这几个scheme,那接下来怎么把他们都打包成app呢?

    这里分享下实际打包过程中的一些经验。

    每个环境都要设置好Debug 和 Release!!!

    千万别认为线上的版本只设置Release就好,哪天需要调试线上版本,没有设置Debug就无从下手了。也千万别认为测试环境的版本只要设置Debug就好,万一哪天要发布一个测试环境需要发Release包,那又无从下手了。我的建议就是每个环境都配置Debug 和 Release。

    在打包的时候,一定要注意将Scheme的名字和编译方式区分开。选择一个Scheme,只是相当于选择了一个环境,并不是代表这Debug还是Release。
    这里写图片描述

    配置好上述之后,就可以选择不同环境运行app了。可以在手机上生成不同的环境的app,可以同时安装。

    这里写图片描述

    接下来说几种动态配置环境变量的方法。

    动态配置环境变量

    使用GCC预编译头参数GCC_PREPROCESSOR_DEFINITIONS

    进入到Build Settings里面,可以找到Apple LLVM Preprocessing,找到Preprocessor Macros,在这里我们是可以加一些环境变量的宏定义来标识符。Preprocessor Macros可以根据不同的环境预先制定不同定义的宏。
    这里写图片描述

    使用plist文件动态配置环境变量

    首先,新建3个名字一样的plist作为3个环境的配置文件(新建三个配置文件,分别放在3个不同文件夹下面即可)。
    这里写图片描述

    接下来我们要做的是在编译的时候(运行app前),动态的copy Configuration.plist到app里面,这里需要设置一个copy脚本。
    这里写图片描述

    进入到我们的Target里面,找到Build Phases,我们新建一个New Copy Files Phase,并且重命名为Copy Configuration Files。其中,脚本能保证我们的Configuration.plist 文件可以在编译的时候,选择其中一个打包进入app。再通过读取这个plist里面的信息就可以做到动态化。

    使用单例来处理环境切换

    当然使用一个单例也可以做到环境切换。新建一个单例,然后可以在设置菜单里面加入一个列表,里面列出所有的环境,然后用户选择以后,单例就初始化用户所选的环境。

    利用xcconfig文件配置多环境

    提到xcconfig,就要先说说几个概念。Xcode Workspace、Xcode Scheme、Xcode Project、Xcode Target、Build Settings 。

    Xcode Project

    An Xcode project is a repository for all the files, resources, and information required to build one or more software products. A project contains all the elements used to build your products and maintains the relationships between those elements. It contains one or more targets, which specify how to build products. A project defines default build settings for all the targets in the project (each target can also specify its own build settings, which override the project build settings).

    project就是一个个的仓库,里面会包含属于这个项目的所有文件,资源,以及生成一个或者多个软件产品的信息。每一个project会包含一个或者多个 targets,而每一个 target 告诉我们如何生产 products。project 会为所有 targets 定义了默认的 build settings,每一个 target 也能自定义自己的 build settings,且 target 的 build settings 会重写 project 的 build settings。

    Xcode Project 文件会包含以下信息,对资源文件的引用(源码.h和.m文件,frame,资源文件plist,bundle文件等,图片文件image.xcassets还有Interface Builder(nib),storyboard文件)、文件结构导航中用来组织源文件的组、Project-level build configurations(Debug\Release)、Targets、可执行环境,该环境用于调试或者测试程序。

    Xcode Target

    A target specifies a product to build and contains the instructions for building the product from a set of files in a project or workspace. A target defines a single product; it organizes the inputs into the build systemthe source files and instructions for processing those source files—required to build that product. Projects can contain one or more targets, each of which produces one product.

    target 会有且唯一生成一个 product, 它将构建该 product 所需的文件和处理这些文件所需的指令集整合进 build system 中。Projects 会包含一个或者多个 targets,每一个 target 将会产出一个 product。需要注意的是, Project 可以包含多个 target, 但是在同一时刻,只会有一个 target 生效,可用 Xcode 的 scheme 来指定是哪一个 target 生效。

    Build Settings

    A build setting is a variable that contains information about how a particular aspect of a product’s build process should be performed. For example, the information in a build setting can specify which options Xcode passes to the compiler.

    build setting 中包含了 product 生成过程中所需的参数信息。project的build settings会对于整个project 中的所有targets生效,而target的build settings是重写了Project的build settings,重写的配置以target为准。

    一个 build configaration 指定了一套 build settings 用于生成某一 target 的 product,例如Debug和Release就属于build configaration。

    Xcode Scheme

    An Xcode scheme defines a collection of targets to build, a configuration to use when building, and a collection of tests to execute.

    一个Scheme就包含了一套targets(这些targets之间可能有依赖关系),一个configuration,一套待执行的tests。

    xcconfig使用

    1,新建一个xcconfig文件,然后在project设置一下。
    这里写图片描述

    这里写图片描述

    接下来,把配置文件换成我们刚刚新建的文件。细心的读者可能发现,其实我们一直使用的cocopods就是用这个文件来配置编译参数的。

    Space-separated list of option specifications. Specifies preprocessor macros in the form foo (for a simple #define) or foo=1 (for a value definition). This list is passed to the compiler through the gcc -D option when compiling precompiled headers and implementation files.

    GCC_PREPROCESSOR_DEFINITIONS 是 GCC 预编译头参数,通常我们可以在 Project 文件下的 Build Settings 对预编译宏定义进行默认赋值。

    在Build Settings里面的 Apple LLVM 7.X - Preprocessing - Preprocessor Macros 。
    这里写图片描述

    Preprocessor Macros 其实是按照 Configuration 选项进行默认配置的, 它是可以根据不同的环境预先制定不同定义的宏,或者为不同环境下的相同变量定义不同的值。

    在xcconfig 我们可以写入不同的 Configuration 选项配置不同的文件。每一个 xcconfig 可以配置 Build Settings 里的属性值, 其实实质就是通过 xcconfig 去修改 GCC_PREPROCESSOR_DEFINITIONS 的值,这样我们就可以做到动态配置环境的需求了。

    现在本地有这么多配置,到底哪一个最终生效呢?打开Build 里面的level,优先级是从左往右,依次降低的。Resolved = target-level > project-level > 自定义配置文件 > iOS 默认配置。
    这里写图片描述

    除了上面的功能以为,还能利用xcconfig动态配置Build Settings里面的很多参数。这其实类似于cocopods的做法。详情资料请大家自行搜索。

    利用Targets配置多环境

    其实使用Scheme和xcconfig就可以实现多环境的功能,使用Targets反而显得更加麻烦。利用Targets可以瞬间大批量产生大量的app。相关使用可以查看:使用多Target来构建大量相似App

    仅仅只用一套代码,就可以生产出7个app。7个app的证书都是不同的,配置也都不同,但是代码只需要维护一套代码,就可以完成维护7个app的目标。

    下面来看一下如何使用Targets来生成不同的app。
    这里写图片描述

    一种方法是完全新建一个Targets,另外一种方法是复制原有的Targets。
    其实第一种方法建立出Targets,之后看你需求是怎么样的。如果也想是做OEM这种,可以把新建出来的project删掉,本地还是维护一套代码,然后在新建的Targets 的Build Phases里面去把本地现有代码加上,参数自己可以随意配置。这样也是一套代码维护多个app。

    第二种方法就是复制一个原有的Targets,这种做法只用自己去改参数就可以了。
    再来说说Targets的参数。
    由于我们新建了Targets,相当于新建了一个app了。所以里面的所有的文件全部都可以更改。包括info.plist,源码引用,Build Settings……所有参数都可以改,这样就不仅仅局限于修改Scheme和xcconfig,所以之前说仅仅配置一个多环境用Targets有点兴师动众,但是它确实能完成目的。根据第二章里面我们也提到了,Targets相当于流水线,仅次于Project的地位,可以想象,有了Targets,我们没有什么不能修改的。

    关于Android如何批量打包和多环境打包请参考:Android多环境、多渠道打包

    展开全文
  • iOS 长按手势执行解决办法

    千次阅读 2018-06-27 14:38:01
    今天做个类似相册的功能,预览图片,长按保存,添加个长按手势,响应事件是弹出个ActionSheet,在我看来无懈可击的操作,竟然出现了问题!!! ActionSheet无耻地弹出两,让我十分悲伤,debug发现,原来是...

    前言

    今天做一个类似相册的功能,预览图片,长按保存,添加一个长按手势,响应事件是弹出一个ActionSheet,在我看来无懈可击的操作,竟然出现了问题!!!

    ActionSheet无耻地弹出两次,让我十分悲伤,debug发现,原来是长按手势搞的鬼,天啊,真的是坑爹之作!

    于是百度了解决办法,通过判断手势的state来执行方法···

    正文

    话不多说,上代码:

        if (sender.state == UIGestureRecognizerStateBegan) {
            UIActionSheet *action = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"保存图片", nil];
            [action showInView:self.scrollView];
        }
    

    今日被手势玩弄,吾心倍感耻辱,他日定一雪前耻,绝不再犯!

    展开全文
  • 在对象生命周期内只执行一次的Block众所周知,要想代码执行一次,可以使用 dispatch_once 函数。有时候我们不想辣么绝。。

    在对象生命周期内只执行一次的Block

    众所周知,要想代码执行一次,可以使用 dispatch_once 函数。

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // do something
    });

    然而该函数真是彻底,dispatch_once 只会在 APP应用 的生命周期内执行一次。有时候我们不想辣么绝。。

    有一次看到 sunnyxx 的公众号发了一段神奇代码:

    launch once

    据说能在对象的生命周期内只执行一次,亲测有效,而且也挺线程安全的。唯一有点美中不足的是,必须要搞一个方法,能不能把它搞成局部呢?

    想法源于前两天遇到的问题,发现在方法内 static 声明的局部静态变量,不受对象的声明周期的影响。换句话说,即使对象销毁了,当再次创建,再次进入该方法时,该静态局部变量的值仍然是上一次的值。这就让强迫症发作的我很尴尬,即不想把该局部变量搞成全局变量,让后在类的 init 方法中初始化,又希望在对象初始化时,或第一次调用该方法时,把该静态局部变量给初始化了。想想,其实让它在方法内且在对象的声明周期内只执行一次就好了,即只让初始化的代码在该方法第一次调用时执行一次。

    好了,废话说完,上代码:

    void (^once)() = ^{
        if (objc_getAssociatedObject(self, _cmd)) return;
        else objc_setAssociatedObject(self, _cmd, @"Launched", OBJC_ASSOCIATION_RETAIN);
        // 一次操作
    };
    once();

    其实就是把 sunnyxx 的代码照搬了而已,sunnyxx 大神不要打我。。

    参考

    展开全文
  • iOS 思想引导大文,进阶必看。
  • 学习iOS开发的第1

    千次阅读 2014-03-13 21:53:16
    今天第一次工作,启动mac mini后,先熟悉了一下mac系统的操作,然后开始上网查询ios开发的相关资料。通过浏览网页知道了ios的开发工具为Xcode,开发语言为objective-c。下载完Xcode,按照网上教程,新建了
  • iOS关于时间的处理

    千次阅读 2016-12-16 09:51:09
    转自:iOS关于时间的处理做App避免不了要和时间打交道,关于时间的处理,里面有不少门道,远不是行API调用,获取当前系统时间这么简单。我们需要了解与时间相关的各种API之间的差别,再因场景而异去设计相应的机制...
  • 其实按 IOS官方文档一步一步做就可以实现上述功能; 这里主要说一下我按文档遇到的问题,以及将原来的C/C++程序(主要是网络层)简单的修改一下就可以支持 IOS后台运行的方法. 1.在 xxxx Info.plist 添加 以支持 ...
  • iOS高级分享 — 谈谈 IOS 13

    千次阅读 2019-09-24 20:47:57
    为了纪念上周发布的iOS13,我们来看看你现在可以在你的应用程序中使用的一些模糊的(基本上是没有文档的)API。我们已经清除了最好的部分IOS13发行说明API差异现在把它们呈现给你。 下面是我们最喜欢的一些从iOS 13...
  • 自己更是踩雷踩了一天才把KeyChain使用与共享数据研究成功 分享到这里 希望大家不用再劳累这么一次 Apple文档上说iOS的keyChain是一个相对独立的空间,当程序替换,删除时并不会删除keyChain的内容,这个要比...
  • iOS与安卓的区别

    万次阅读 2020-06-18 09:12:50
    IOS与安卓的区别: 两者运行机制不同: IOS采用的是沙盒运行机制 安卓采用的是虚拟机运行机制 两者后台制度不同: IOS中任何第三方程序都不能在后台运行 安卓中任何程序都能在后台运行,直到没有内存才会关闭 两者...
  • IOS开发之简单音频播放器

    千次阅读 2016-05-18 11:27:05
    今天第一次接触IOS开发的UI部分,之前学OC的时候一直在模拟的使用Target-Action回调模式,今天算是真正的用了一次。为了熟悉一下基本控件的使用方法,和UI部分的回调,下面开发了一个特别简易的音频播放器,来犒劳...
  • iOS程序员的BAT面试经验

    千次阅读 2016-04-05 11:45:09
    iOS程序员的BAT面试经验
  • 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言、ObjC等知识,对于很多朋友而言开发IOS一天就想直接看到成果,看到可以运行的IOS程序。但是这里我想强调一下,前面的知识是你日后开发IOS...
  • Firebase iOS 远程配置教程

    千次阅读 2018-07-25 16:38:35
    原文:Firebase Remote Config ...你永远不需要碰其它代码,因为无论什么东西你一次就能做对? 哈,我做不到。 作为一名成功的 app 开发者,通常需要对 app 进行频繁的更改。有时,这些更改是增加功能或者 bug...
  • 安卓和iOS的区别

    千次阅读 2019-06-28 14:35:24
    IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。 沙盒机制: 概念:沙盒是种安全机制,用于防止不同应用之间互相访问 作用:就是存储数据,每个沙盒就相当于每个每个应用的系统目录 核心:sandbox对应用...
  • WEBAPP介绍及其iOS Web开发技巧总结

    万次阅读 多人点赞 2014-07-03 19:29:57
    结合网上相关资料,以及自己项目中的经验,收集汇总了iOS Webapp相关的开发知识,如下。 WebApp是种新出现的基于WEB形式的类应用程序,运行在高端的移动终端设备上,其应用范围会越来越广。 开发者们都知道在...
  • Jenkins自动生成ios安装包

    千次阅读 2018-06-05 17:16:14
    昨天位前同事问我,之前自动生成ios安装包是怎么弄的?网上找不到比较好的教程。这个搭建过程我是整理成文档的,但没有记录到博客中,趁今天稍微空点,把文档记录到博客上,方便需要的朋友借鉴参考。 听说自动...
  • iOS AutoreleasePool 实现原理

    千次阅读 2019-04-18 21:58:51
      最近在梳理基础知识,前两根据自己的理解,以及参考同行大家的文章,整理了一下autorelease 的实现原理,自己的东西没有,大家别见笑,具体内容如下: 什么是AutoreleasePool   AutoreleasePool(自动释放池...
  • 写给 iOS 程序员看的 C++(1)

    千次阅读 2016-09-07 11:59:09
    原文:Introduction to C++ for iOS Developers: Part 1 作者:Matt Galloway 译者:kmyhy 你是个 Objective-C 方面的专家吧?你是否正在寻找下个要学习的目标?如果是,那么这篇文章就是专门为你准备的了,...
1 2 3 4 5 ... 20
收藏数 18,665
精华内容 7,466
关键字:

一天执行一次ios