在目标C中是否有一种方法可以定义一个线程安全的静态int?
例如,如果我有一个名为Session的类,它具有:
static unsigned int session_id = 1000;
- (int) generateSessionID{
return session_id++;
}
Run Code Online (Sandbox Code Playgroud)
我正在从不同的线程构造会话对象,每个会话对象应该具有唯一的ID.
我有以下从套接字读入的代码:
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)
但非正在发挥作用.提前致谢.
我见过很多代码都是这样做的:
@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;实例变量吗?这样做有什么好处?声明实例变量与属性的最佳做法是什么?编译器是否将实例变量与属性相关联?
提前致谢.
在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类构造函数的参数类型.
提前致谢.