zoukankan      html  css  js  c++  java
  • 收集的一些OC知识点

    bool 即是 signed char,在iphone64位是unsigned char。

    单例模式在c++和java都有,一般是需要一个不释放的对象,在创建时需要注意多线程的问题,使用synchronized(self)加锁,retainCount使用一个无限制大的数

    ,需要重写retain和autorelease,release等函数。

    属性:

    The @property is an Objective-C directive which declares the property. The "retain" in the parenthesis specifies that the setter should retain the input value.

    在属性的setter中会retain一下对象

    比如:

    @property (nonatomic, retain) NSString *s01;

    self.s01 = stringObject; 这个时候stringObject的retainCount会加1;

    如果用_s01 = stringObject则stringObject的retainCount不会加1。

    OC中的nil是空对象,调用任一方法都不会导致崩溃,所以对象最后释放的时候置为nil可以保证程序的稳定。

    cocos2d的一些概念

    有ccsence, ccdirector, cclayer, ccsprite

    其中sence是场景,游戏由各个场景构成,如第一关,第二关,还有中间的过渡场景;

    director负责场景直接的切换,是一个单例模式;

    layer相当于层,一个场景中可以包含好几层,就是有好几个layer,每个layer上面可以放sprite精灵

    sprite精灵,每个控件都是精灵,是游戏的最基本单位,相当于uiview,可以给sprite添加action。

    cocos2d中的地图编辑器叫tileMap

    一个通过wifi连接的游戏例子gameKit http://www.cocoachina.com/bbs/read.php?tid-16732.html

    IOS中的线程池

    跟java中的ThreadPoolExecutor差不多,都是生成n个线程放在那里,不一定马上执行任务,在需要的时候从线程池中取出线程,加入任务,这样节省了每次创建线程需要的资源。

    IOS的线程池是使用NSOperationQueue实现,每个任务是NSOperation,在NSOperationQueue中添加NSOperation,系统就会执行NSOperation的- (void)main函数的内容

    例子代码如下:

     1     NSOperationQueue *threadPool = [[NSOperationQueue alloc] init];
     2     int maxThreadCount = 4;
     3     [threadPool setMaxConcurrentOperationCount:maxThreadCount];
     4     for (int i=0; i<maxThreadCount; i++) {
     5         //create thread
     6         
     7         NSLog(@"start addding operation. task %d", i);
     8         ThreadTask *task = [[ThreadTask alloc] init];
     9         [threadPool addOperation:task];
    10         
    11     }

    其中的ThreadTask是NSOperation的子类,重写了- (void)main内容

    ThreadTask.h

    #import <Foundation/Foundation.h>
    
    @interface ThreadTask : NSOperation
    
    @end

    ThreadTask.m

    #import "ThreadTask.h"
    
    @implementation ThreadTask
    
    - (void)main
    {
        NSLog(@"execute task.");
    }
    
    @end

    NSString *text = @"this is test code.";

    @"this is test code."是有效常量。 

    使用[UIImage imageName:@"']方法获取的图片在内存中由系统cache管理,在同一页面中加入多个使用同一个图片的UIImage对象不会增加内存。

    比如:

    UIImage *img01 = [UIImage imageName:@"001.png"];

    UIImage *img02 = [UIImage imageName:@"001.png"];

    UIImage *img03 = [UIImage imageName:@"001.png"];

    只是占用了一份内存,不是3份内存空间。

    如果要将NSArray内容写入到文件中,可以用下面这个接口:

    - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

    同时需要注意NSArray中的对象必须是Foundation的类,ex:NSString/NSData/NSUrl等

    如果是自定义的类,调用WriteToFile会返回失败结果。

    这个跟Object的Copy是一样的,NSArray *arr01 = [NSArray alloc] initWithObject:@"1",@"2",@"3",nil];

    NSarray *arr02 = [arr01 copy];

    这样没有问题。如果是自定义的类,调用copy则只是复制了指针,没有创建新的对应,生成对应的空间。

     

    遍历队列时如果要删除队列成员的时候需要小心,容易引起崩溃

    比如:

    1     for (NSString *str in arrayWords) {
    2         if ([str isEqualToString:@"2"]) {
    3             [arrayWords removeObject:str];
    4         }
    5     }

    这样会引起崩溃,因为arrayWords的长度发生了变化,最后会找不到对应位置的成员对象。

    解决这个问题可以在删除后立即跳出循环,或者跳出循环后再删除成员对象。

    NSUserDefault是缓存在内存中的,不是每次都从数据库中读取数据,所以查询起来速度很快。调用synchronize方法后会同步内存和数据库的内容。

    原文如下:

    At runtime, you use an NSUserDefaults object to read the defaults that your application uses from a user’s defaults database. NSUserDefaults caches the information to avoid having to open the user’s defaults database each time you need a default value. The synchronize method, which is automatically invoked at periodic intervals, keeps the in-memory cache in sync with a user’s defaults database.

     xcode调试APP的几个技巧

    http://www.cocoachina.com/newbie/env/2014/0526/8555.html

    xcode工程中使用了boost库导致产生很多warning的解决方法:

    设置 Symbols Hidden by Default = YES 

    和 inline methods hidden = YES

  • 相关阅读:
    day1-python简介+安装
    dgango中admin下添加搜索功能
    调用zabbix 分组api
    python 调用zabbix api实现查询主机信息,输出所有主机ip
    python实现用户登录界面
    怎样过滤跨站恶意脚本攻击(XSS)
    java服务安装(一):使用java service wrapper及maven打zip包
    详解Maven项目利用java service wrapper将Java程序生成Windows服务
    使用tomcat7-maven-plugin部署Web项目
    常用Maven插件介绍
  • 原文地址:https://www.cnblogs.com/huangzizhu/p/3706419.html
Copyright © 2011-2022 走看看