`

Objective-C 中一些代码记录[转]

 
阅读更多

http://unmi.cc/objective-c-snippets

1. 初始化一个空的数组

    NSMutableArray *array = [NSMutableArray arrayWithObjects:nil];
    
    //或者,这里的 Capacity 像 java 的 ArrayList 中的 Capacity
    //NSMutableArray ×array = [NSMutableArray arrayWithCapacity:5];
   
    MSLog(@"%i", [array count]);

如果用到了 alloc 的话,就必须自己处理好相应的 release 操作了,像:

    NSMutableArray *array = [[NSMutableArray alloc] init];
    NSMutableArray *array1 = [[NSMutableArray alloc] initWithCapacity:5];
    NSMutableArray *array2 = [[NSMutableArray alloc]initWithObjects:nil];

 

其实要初始化某种类型集合的空集合,下面的那些方式应该是更为合适的:

    NSArray *array = [NSArray array];

    NSMutableArray *array1 = [NSMutableArray array];

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];

    NSSet *set = [NSSet set];

2. 类的初始化方法:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
NSInteger globalVar = 5;
 
@interface TestClass : NSObject
- (void) foo;
@end
 
@implementation TestClass
 
//在第一次加载 TestClass 时被自动调用
+ (void) initialize {
    extern NSInteger globalVar;
    globalVar += 5;
}
 
- (void) foo {
    NSLog(@"globalVar: %i", globalVar);
}
 
@end
 
    //应用上面的代码
    TestClass *test = [[TestClass alloc] init];
    [test foo]; //输出为 10
    TestClass *test1 = [[TestClass alloc] init];
    [test1 foo]; //输出也是 10

Objective-C 的 + (void) initialize 就相当于 Java 中的 static {}  静态块一样,+ (void) initialize 类初始方法也只会被调用一次。在 Objective-C 和 Java 它们各自反应为:

Objective-C 的   + (void) initialize   ------------    _class_initialize
Java 的                static  {}                   ------------   <cinit>,  现在看到的是 static{}

3. 多线程相关的代码

Obj-C 中与多线程相关的类有 NSOperation、NSOperationQueue 和 NSThread。NSOperation 类似与 Java 的 Runnable 接口,只是要实现的 NSOperation 的方法是 -(void) main; 当把 NSOperation 加到 NSOperationQueue 后,队列就会为每个 NSOperation 实例分配一个 NSThread 去启动它。NSOperation 执行完后会被 release 掉。

下面是使用 NSOperation 和 NSOperationQueue 的一段完整代码:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#import <Foundation/Foundation.h>
 
@interface MyOperation : NSOperation{
    NSString *name;
}
 
@end
     
@implementation MyOperation
 
- (id) initWithName: (NSString *) theName {
    self = [super init];
    name = theName;
    return self;
}
 
- (void) main {
    NSLog(@"Thread %@ Start run: %@", name, [NSDate date]);
}
 
@end
 
int main (int argc, const char * argv[])
{
 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
 
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    NSOperation *operation1 = [[[MyOperation alloc] initWithName:@"One"] autorelease];
    NSOperation *operation2 = [[[MyOperation alloc] initWithName:@"Two"] autorelease];
    NSOperation *operation3 = [[[MyOperation alloc] initWithName:@"Three"] autorelease];
    [queue addOperation:operation1];
    [queue addOperation:operation2];
    [queue addOperation:operation3];
     
    [queue setMaxConcurrentOperationCount:2];//可设置同时并发数
     
    sleep(50000);
    [pool drain];
    return 0;
}

执行结果输出中顺序是不定的,像:

011-08-09 14:20:54.144 TestObjC[3602:1c03] Thread Two Start run: 2011-08-09 06:20:54 +0000
2011-08-09 14:20:54.144 TestObjC[3602:1e03] Thread One Start run: 2011-08-09 06:20:54 +0000
2011-08-09 14:20:54.146 TestObjC[3602:1e03] Thread Three Start run: 2011-08-09 06:20:54 +0000

NSOperation 还有一个子类是  NSInvocationOperation,它与  NSOperation 的区别是可以指定线程要执行的实例的某个方法,而不只限制是 main 方法。

分享到:
评论

相关推荐

    objective-c读取sqlite3

    首先,你需要了解SQLite3的API接口,Objective-C中通常通过C语言接口与SQLite进行交互。在项目中,你需要引入`&lt;sqlite3.h&gt;`头文件来使用SQLite的函数。安装SQLite3库后,可以开始编写代码来打开、创建或检查数据库...

    实现待办事项列表的 Objective-C代码、建议及注意项.docx

    ### 实现待办事项列表的Objective-C代码、建议及注意事项 #### 一、Objective-C简介与背景 Objective-C是一种结合了C语言的强大功能与Smalltalk语言面向对象特性的编程语言。自1983年首次发布以来,它一直是苹果...

    3des.rar_3des_3des objective_3des objective-c_c 3des_objective

    标题中的"3des.rar_3des_3des objective_3des objective-c_c 3des_objective"暗示了这个压缩包包含的是关于3DES加密算法及其在Objective-C编程语言中的实现的相关资料。3DES,全称为Triple Data Encryption ...

    Objective-C中消息转发机制demo

    Objective-C是一种强大的面向对象编程语言,特别是在Apple的iOS和macOS开发中占据核心地位。在Objective-C中,消息传递是其动态性的重要体现,而消息转发机制则是这种动态性的一个关键组成部分。本教程将深入探讨...

    [Objective-C.程序设计(第4版)].(斯蒂芬).林冀等.扫描版

    - **调试技巧**:学习如何有效地调试Objective-C代码,使用工具如Xcode的断点、日志记录等功能。 ### 相关知识点详解 #### 1. 面向对象编程 Objective-C采用了消息传递的方式实现面向对象编程。当一个对象接收到一...

    swift-ObjectiveKit为一组强大的Objective-C运行时功能。提供了一个Swift友好的API

    然而,由于历史原因,Objective-C仍然是许多现有代码库和框架的基础,特别是在Apple的生态系统中。为了在Swift项目中无缝地利用这些Objective-C资源,Swift提供了桥接头和互操作性。ObjectiveKit正是这样一个工具,...

    Objective-C_商品销售系统

    Objective-C是一种强大的面向对象编程语言,特别是在苹果的iOS和macOS开发中占据核心地位。商品销售系统的实现,意味着我们将在Objective-C中构建一个能够管理商品库存、处理订单、跟踪销售等核心功能的应用程序。...

    swift-CJMethodLog对于Objective-C中的任意类任意方法均可监听其调用日志

    在Swift编程语言中,我们有时需要对Objective-C的类或方法进行监控,以便于调试、性能分析或日志记录。`CJMethodLog`是一个工具,它提供了对Objective-C类和方法调用日志的监听功能。这个工具的使用极大地便利了...

    探索NSObject的协议精髓:Objective-C中的基础方法解析

    4. **C 语言兼容**:与 C 语言高度兼容,几乎所有的 C 语言代码可以在 Objective-C 中使用。 5. **Foundation 框架**:通常与苹果的 Foundation 框架一起使用,提供用于文件处理、网络通信、数据存储等的高级 API。 ...

    AOP-for-Objective-C-master.zip

    AOPAspect是为Objective-C设计的一个小型AOP库,它允许开发者在不修改原有代码的情况下,插入额外的行为或逻辑,例如日志记录、性能监控、错误处理等。这个库遵循MIT许可协议,这意味着它是开源的,可以自由使用、...

    XXTEA加密解密 iOS 的 Objective-C 完美实现

    Objective-C是苹果平台上的主要编程语言,它基于C语言并添加了面向对象的特性。在iOS应用开发中,Objective-C常用于构建用户界面、处理数据以及与其他系统服务进行交互。当涉及到敏感数据时,如用户登录信息、隐私...

    突破Objective-C开发速学手册之面向对象编程PPT课件.pptx

    Objective-C中的存储类别包括`auto`(默认,用于局部变量)、`static`(静态局部变量,保持其值跨方法调用)、`const`(常量)、`extern`(全局变量的引用)和`volatile`(指示变量可能被未记录的事件修改)。...

    IOS 日记代码(Objective-C)

    日记记录的时候就记录三个数据,标题,内容,写日记的时间。这个时间精确到秒,相当于数据库的主键。我们点击以前写的日记项,也可以对其进行修改,这个时间也会修改。 3.界面设置 我先贴两个图片大家理解一下就好...

    跟踪objective - c类或者方法调用的实例.zip

    在Objective-C编程中,有时我们需要了解程序运行时的动态行为,比如跟踪某个类或方法的调用过程。这种需求在调试、性能优化、日志记录等方面都十分常见。"跟踪Objective-C类或者方法调用的实例.zip"提供了一个开源...

    WebKit Objective-C Programming Guide

    WebKit还支持从Objective-C代码中执行JavaScript脚本,这极大地扩展了应用的功能性和交互性。然而,为了防止恶意代码的执行,WebKit引入了“Spoofing”技术,即通过模拟请求来检测潜在的安全威胁。 #### 八、Carbon...

    objective-c实现简单计算器

    Objective-C是一种强大的面向对象的编程语言,特别是在iOS和macOS应用程序开发中占据核心地位。本教程将探讨如何使用Objective-C实现一个简单的计算器应用。我们将基于Xcode IDE进行开发,这是一款由Apple提供的集成...

    Find unused Objective-C imports..zip

    在iOS和macOS开发中,Objective-C是一种广泛使用的编程语言,尤其在Apple的生态系统中占据着核心地位。然而,随着项目的发展,代码库往往会积累大量的导入(imports),其中可能包含许多未使用的类、协议或者头文件...

    A proper CSV parser for Objective-C.zip

    在Objective-C中,正确解析CSV文件是处理这种类型数据的关键步骤。 这篇压缩包"A proper CSV parser for Objective-C.zip"提供了一个适用于Objective-C的CSV解析器,可能是为了帮助开发者更有效地读取和操作CSV文件...

    适用于iOS的示例Matrix客户端_Objective-C_Shell_下载.zip

    这个压缩包"适用于iOS的示例Matrix客户端_Objective-C_Shell_下载.zip"包含了使用Objective-C开发的一个Matrix iOS客户端的示例代码,这对于iOS开发者,特别是对Matrix感兴趣的开发者来说,是一个很好的学习资源。...

    Object-C语言教程&案例&相关项目资源

    - 保留了C语言的所有特性,使得开发者可以轻松地将C代码集成到Objective-C项目中。 - 采用了独特的消息传递机制,使用方括号([])来调用方法。 - **语法**:Objective-C结合了C语言的简洁性和Smalltalk的面向对象...

Global site tag (gtag.js) - Google Analytics