小编Uni*_*nis的帖子

线程安全的静态变量目标c

在目标C中是否有一种方法可以定义一个线程安全的静态int?

例如,如果我有一个名为Session的类,它具有:

static unsigned int session_id = 1000;

- (int) generateSessionID{
        return session_id++;
}
Run Code Online (Sandbox Code Playgroud)

我正在从不同的线程构造会话对象,每个会话对象应该具有唯一的ID.

objective-c thread-safety

9
推荐指数
2
解决办法
1万
查看次数

将字节转换为short或整数

我有以下从套接字读入的代码:

Int8     buffer[102400];
UInt8     *buffer_p = buffer;;
int       bytesRead;
bytesRead = CFReadStreamRead(stream, buffer, 102400); 
Run Code Online (Sandbox Code Playgroud)

我期待的消息以短(2字节)短(2字节)整数(4字节)开始.我不知道如何将它们转换为相应的类型.

我尝试了以下方法:

uint16_t zero16 = NTOHS(buffer_p);
buffer_p += sizeof(uint16_t);
uint16_t msg_id16 = NTOHS(buffer_p);
buffer_p += sizeof(uint16_t);
uint32_t length32 = NTOHL(buffer_p);
buffer_p += sizeof(uint32_t);
Run Code Online (Sandbox Code Playgroud)

要么

NSMutableData *data = [NSMutableData dataWithBytes:buffer length:bytesRead];

NSRange firstshort = {0,2};
NSRange secondshort = {2,2};
NSRange intrange = {4,4};
short zero;
[data getBytes:&zero range:firstshort];
short msgid;
[data getBytes:&msgid range:secondshort];
int length;
[data getBytes:&length range:intrange];
Run Code Online (Sandbox Code Playgroud)

但非正在发挥作用.提前致谢.

objective-c

3
推荐指数
1
解决办法
3309
查看次数

Instance变量与属性有什么不同?

我见过很多代码都是这样做的:

@interface Test0 : NSObject {
        @private int iVar;
}
@property (readwrite,assign) int iVar;
@end
Run Code Online (Sandbox Code Playgroud)

和其他一些代码:

@interface Test0 : NSObject {
}
@property (readwrite,assign) int iVar;
@end
Run Code Online (Sandbox Code Playgroud)

我知道你使用它@synthesize iVar来告诉编译器生成属性的getter和setter方法iVar.

我的问题:我们需要声明@private int iVar;实例变量吗?这样做有什么好处?声明实例变量与属性的最佳做法是什么?编译器是否将实例变量与属性相关联?

提前致谢.

objective-c

3
推荐指数
1
解决办法
483
查看次数

动态实例化对象Objective-C

在Java中,我们可以像这样动态地实例化一个对象(只知道参数类型):

Class<?> msgClass = Class.forName(className);
constructor = msgClass.getConstructor(String.class, String.class, String.class);    
MyClass myClass = (MyClass) constructor.newInstance(myString, myString2, myString3);    

    public class MyClass {        
        public MyClass(String s, String s2, String s2){}
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法在objective-c中做同样的事情,只知道要传递给objective-c类构造函数的参数类型.

提前致谢.

dynamic object objective-c instantiation

3
推荐指数
1
解决办法
1357
查看次数