我有mutlithread通过通信的客户端 - 服务器应用程序sockets.我使用这种结构创建新线程:
pthread_t thread;
pthread_create(&thread, NULL, c->sendMessage, (void *) fd);
Run Code Online (Sandbox Code Playgroud)
其中fd是连接的ID,c->sendMessage是一个函数,在创建新线程并处理该线程后调用.在这个函数中,我需要通过发送一些消息send(int sockfd, const void *buf, size_t len, int flags);
所以我sockfd这样说:
void * Client::sendMessage(void *threadid) {
int sockfd = (int) threadid;
// some more code here and in the end I send the data via send(int sockfd, const void *buf, size_t len, int flags)
}
Run Code Online (Sandbox Code Playgroud)
我使用-pedanticflag 编译,大多数编译器(包括我的编译器)在编译期间不会抛出任何警告或错误.但一些编译说,从这个重复输入过程中抛出一个错误void *来int是不安全的,可能会导致loose of precision.我明白,这不是一个好的解决方案,应该做得更清洁.但我无法弄清楚如何.任何人都可以建议我任何干净的练习,如何重新输入ponter到int并避免编译期间的任何警告?
我一直在阅读许多类似的问题和答案,但仍然不太明白这里出了什么问题.
我正在尝试创建一个按钮以返回上一个视图,但我不断收到标题中提到的错误.有人可以告诉我我做错了什么吗?
UIImage *image = [UIImage imageNamed:@"listbutton.png"];
UIButton *listbutton = [UIButton buttonWithType:UIButtonTypeCustom];
listbutton.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );
[listbutton setImage:image forState:UIControlStateNormal];
[listbutton addTarget:self action:@selector(goBack:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:listbutton];
Run Code Online (Sandbox Code Playgroud)
回去:
- (void)goBack
{
[self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
错误:
2014年1月5日22:03:13.344 tablepractice [12509:70B] - [DetailViewController GoBack的:]:无法识别的选择发送到实例0x8b72130 2014年1月5日22:03:13.348 tablepractice [12509:70B] *终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因: ' - [DetailViewController GoBack的:]:无法识别的选择发送到实例0x8b72130'*第一掷调用堆栈:(0的CoreFoundation 0x017405e4 exceptionPreprocess + 180 1 libobjc.A.dylib
0x014c38b6 objc_exception_throw + 44 2的CoreFoundation
0x017dd903 - [NSObject(NSObject)doesNotRecognizeSelector:] + 275 3
CoreFoundation 0x0173090b __ forwarding + 1019 4 …
我有一个函数,它使用GCD在另一个线程中通过索引加载图像.
所以我们假设:
-(void)loadMainImageToIndex:(long)index
{
NSDictionary *dic=[mainData objectAtIndex:index];
NSString *userImageUrl=[dic objectForKey:@"url"];
NSURL *userUrl=[NSURL URLWithString:userImageUrl];
[self downloadImageWithURL:userUrl completionBlock:^(BOOL succeeded, NSData *tdata)
{
if (succeeded)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^
{
//do something here
dispatch_async(dispatch_get_main_queue(), ^
{
//do something here that uses the index argument
Run Code Online (Sandbox Code Playgroud)
我称这个功能为3次:
[self loadMainImageToIndex:0];
[self loadMainImageToIndex:1];
[self loadMainImageToIndex:2];
Run Code Online (Sandbox Code Playgroud)
问题是,当第一次调用将结束线程操作时,将达到这一点:
dispatch_async(dispatch_get_main_queue()
Run Code Online (Sandbox Code Playgroud)
他会在那里看到index=0,还是他会看到最后一个指数called (==2)?
问题是,他是否复制了整个函数,所以当他完成时他能记住启动该方法的论点?另外一件事,同时召唤它3次,是一种不好的做法吗?
谢谢.
[下面的固定问题]
我有这门课:
Class Doc() {
private String D;
Doc(String d) {
D = d;
}
@Override
public boolean equals(Object o) {
if (o instanceOf String) {
if (o.equals(D)) return true;
else return false;
} else return false;
}
@Override
public int hashCode() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果我运行测试,使用例如"abc"作为参数启动Doc()然后使用Doc().equals("abc")它返回true - 正如我所料.如果我使用:
ArrayList docs = new ArrayList<Doc>();
Doc d = new Doc("123");
Docs.add(d);
System.out.println(docs.contains("123"));
Run Code Online (Sandbox Code Playgroud)
它返回false,我不确定为什么.我已经尝试将输出添加到.equals()方法以检查它是否被使用,它是.这个代码hashCode()只是一些虚假(我知道我应该做一些正确的事,我只是不确定如何) - 但我只会使用equals().
不过,我读到的地方equals()也会检查hashCode(); 如果我在其中添加System.out.println(".")第一行 …
我的问题分为两部分:
NSString *bar = @"bar";
NSString *foobar = @<@"foo %@", bar>
我在整个项目中使用了stringWithFormat方法,我认为这对代码简单性和整洁性都非常有用.
我试图创建我的第一个iphone程序,我意识到制作2个dims的数组或矩阵对我来说很难...... :-(
*我如何以及在哪里声明这样的东西(取自java)所以所有的功能都可以看到它:
int[] myArray = new int[6];
Run Code Online (Sandbox Code Playgroud)
*我怎样才能转发此功能:
public int[] sortArray (int[] myArray){
int tmp;
for (int x = 0; x < myArray.length; x++) {
for (int y = x+1; y < 6; y++) {
if (myArray[y] < myArray[x]) {
tmp = myArray[x];
myArray[x] = myArray[y];
myArray[y] = tmp;
}
}
}
return myArray;
}
Run Code Online (Sandbox Code Playgroud)
*以及我如何称呼此功能?
sortArray(myArray);
Run Code Online (Sandbox Code Playgroud)
谢谢大家!沙龙
在myProj.h文件中,我声明了:
@property (strong, nonatomic) NSMutableArray *wordsArray;
Run Code Online (Sandbox Code Playgroud)
在.m文件中,我使用以下命令在viewDidLoad中添加一些值:
[_wordsArray addObject:[NSString stringWithFormat:@"Now is the time for all good men to come to the aid of their party."]];
[_wordsArray addObject:[NSString stringWithFormat:@"Four score and seven years ago our forefathers..."]];
[_wordsArray addObject:[NSString stringWithFormat:@"A coward dies many deaths; a brave man but one."]];
Run Code Online (Sandbox Code Playgroud)
我还在这里设置了一个计数器(在.h文件中定义为int):
__cntr = 0;
Run Code Online (Sandbox Code Playgroud)
在(IBAction)pressButton:(id)发送者我想将标签(*somelabel)文本更改为数组[0]中的下一个值(然后将_cntr迭代为1并获取该值等).所以我有:
_somelabel.text = [NSString stringWithFormat:@"%@",[_wordsArray objectAtIndex:__cntr]];
Run Code Online (Sandbox Code Playgroud)
构建,但是当我运行并按下按钮时,标签文本变为(空).
将数值添加到数组或将其拉出的问题也是如此.谢谢
我创建了单例类,并将一个类对象(myRecords)作为其中的属性.我想在这个属性的getter/setter中做一些实现处理.
我如何覆盖此属性的getter/setter?
注意:myRecord的初始化不是在单例内完成的.
// singleton.h
@interface mySingleton : NSObject
@property(nonatomic, copy) NSString *name;
@property(nonatomic) myRecords *record;
+(mySingleton *)instance;
@end
// singleton.m
@implementation TRNApplicationContext
+(mySingleton *)instance {
static mySingleton *_instance = nil;
@synchronized (self) {
if (_instance == nil) {
_instance = [[self alloc] init];
}
}
return _instance;
}
-(void) setRecord:(myRecords *)record
{
self.title = record.name;
. . .
}
-(myRecords *) record
{
return self.record; // Error - EXC_BAD_ACCESS
}
@end
// TestMainViewController.m - Below is Singleton usage
@implementation …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用NSInteger计算开启和关闭的IOS项目.在2200读取的时间相当于晚上10点.我想知道是否有一些东西在关闭后的一个小时内,所以我将整数(工作)中的实际世界时间与结束时间进行比较 - 100但数学运算没有按预期工作.
自定义类:
@property (assign) NSInteger *sus;
@property (assign) NSInteger *sue;
Run Code Online (Sandbox Code Playgroud)
在控制器中:
custom_class *location = object
resultINT = real world time in Integer with 24 hr
NSLog(@"Result INT: %i", resultInt);
NSLog(@"location.sue: %i", location.sue);
NSLog(@"Location - 1hr %i", location.sue -100);
NSInteger *yellowEnd = location.sue - 100;
NSLog(@"Yellow %i", yellowEnd);
Run Code Online (Sandbox Code Playgroud)
结果:
2014-07-13 18:23:51.269 Time-Genesis-Marcus[7591:416078] Result INT: 1823
2014-07-13 18:23:51.269 Time-Genesis-Marcus[7591:416078] location.sue: 2200
2014-07-13 18:23:51.269 Time-Genesis-Marcus[7591:416078] Location - 1hr 1800
2014-07-13 18:23:51.270 Time-Genesis-Marcus[7591:416078] Yellow 1800
Run Code Online (Sandbox Code Playgroud)
为什么第三和第四行没有返回2100?谢谢
class Test
{
private:
int x;
int y;
public:
Test(int x = 0, int y = 0) { this->x = x; this->y = y; }
Test &setX(int a) { x = a; return *this; }
Test &setY(int b) { y = b; return *this; }
void print() { cout << "x = " << x << " y = " << y << endl; }
};
int main()
{
Test obj1(5, 5);
obj1.setX(10).setY(20);
obj1.print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码输出为10 20 …