当我执行此代码时:
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(showButtons) userInfo:nil repeats:NO];
Run Code Online (Sandbox Code Playgroud)
我需要将它取消或释放它,不管内存管理是什么?
我正在使用ARC
在下面的摘录中,
/*A ClassName with instanceMethod and ClassMethod */
-(void)instanceMethod;
+(void)ClassMethod;
/*To call a instance method in background */
ClassName class1obj = [ClassName alloc] init];
[class1obj performSelectorInBackground:@selector(instanceMethod) withObject:nil];
Run Code Online (Sandbox Code Playgroud)
同样,如何使用后台调用ClassMethod performSelectorInBackground?
如果可能,请解释!请伙计们携手..
我声明我的.h文件是这样的:
#import <UIKit/UIKit.h>
@interface NavigationTripViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource>{
NSArray *questionTitleTrip;
NSArray *questionDescTrip;
NSMutableArray *answerTrip;
NSMutableArray *pickerChoices;
int questionInt;
int totalInt;
IBOutlet UILabel *questionNum;
IBOutlet UILabel *questionTotalNum;
IBOutlet UILabel *recordType;
IBOutlet UITextView *questionDes;
IBOutlet UIView *answerView;
IBOutlet UIButton *preButton;
IBOutlet UIButton *nextButton;
UITextField *text;
UIPickerView *picker;
}
@property (retain, nonatomic) NSArray *questionTitleTrip;
@property (retain, nonatomic) NSArray *questionDescTrip;
@property (retain, nonatomic) NSMutableArray *answerTrip;
@property (retain, nonatomic) NSMutableArray *pickerChoices;
@property (retain, nonatomic) IBOutlet UILabel *questionNum;
@property (retain, nonatomic) IBOutlet UILabel *questionTotalNum;
@property …Run Code Online (Sandbox Code Playgroud) class SomeViewController: UIViewController {
let semaphore = DispatchSemaphore(value: 1)
deinit {
semaphore.signal() // just in case?
}
func someLongAsyncTask() {
semaphore.wait()
...
semaphore.signal() // called much later
}
}
Run Code Online (Sandbox Code Playgroud)
如果我告诉信号量等待,然后在信号量被告知发出信号之前取消初始化拥有它的视图控制器,则应用程序会因错误而崩溃Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)。但是,如果我只是调用视图控制器的方法,就可以避免灾难semaphore.signal()。deinit但是,如果异步函数在deinit调用之前返回并且视图控制器被取消初始化,则signal()调用两次,这似乎没有问题。但这样做安全和/或明智吗?
我想在GCD块中创建一个计时器(每2秒触发一次并调用一个方法)将其用作后台任务.但是,我认为计时器永远不会发火.这是我的代码:
- (void)startMessaging
{
BOOL queue = YES;
dispatch_queue_t _queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timerSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0, _queue);
dispatch_source_set_timer(timerSource, dispatch_walltime(NULL, 0), 2ull * NSEC_PER_SEC,1ull * NSEC_PER_SEC );
dispatch_source_set_event_handler(timerSource, ^{
if (queue) {
[self observeNewMsgs];
}
});
dispatch_resume(timerSource);
}
- (void)observeNewMsgs
{
NSLog(@"JUST TO TEST");
// Staff code...
}
Run Code Online (Sandbox Code Playgroud)
那么这有什么问题呢?我怎样才能解决这个问题?
嘿想模糊我的观点,我使用这段代码:
//Get a UIImage from the UIView
NSLog(@"blur capture");
UIGraphicsBeginImageContext(BlurContrainerView.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//Blur the UIImage
CIImage *imageToBlur = [CIImage imageWithCGImage:viewImage.CGImage];
CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"];
[gaussianBlurFilter setValue:imageToBlur forKey: @"inputImage"];
[gaussianBlurFilter setValue:[NSNumber numberWithFloat: 5] forKey: @"inputRadius"]; //change number to increase/decrease blur
CIImage *resultImage = [gaussianBlurFilter valueForKey: @"outputImage"];
//create UIImage from filtered image
blurredImage = [[UIImage alloc] initWithCIImage:resultImage];
//Place the UIImage in a UIImageView
UIImageView *newView = [[UIImageView alloc] initWithFrame:self.view.bounds];
newView.image = blurredImage;
NSLog(@"%f,%f",newView.frame.size.width,newView.frame.size.height);
//insert blur …Run Code Online (Sandbox Code Playgroud) 所以,我正在学习如何使用JSON从DB获取数据,然后将数据放在某个数组上.citiesArray.addObject(City())当我需要将对象city(id,name,state,...)中的所有数据放入数组时,最后一行会出现问题.我一直在逐行看编译器,基本上一切都很好,除了最后,我的数组仍然是空的(它的值是nil)?
for (var i=0;i<jsonArray.count;i++){
//Create city objec
var cID: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("id") as NSString
var cName: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("cityName") as NSString
var cState: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("cityState") as NSString
var cPopulation: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("cityPopulation") as NSString
var cCountry: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("country") as NSString
//add city obj (i have City class) to city array
var city = City()
city.cityID = cID as NSString
city.cityName = cName as NSString
city.cityState = cState as NSString
city.cityPopulation = cPopulation …Run Code Online (Sandbox Code Playgroud) 我有一个对象数组,其中有一个类型的成员,Date我正在尝试对整个数组进行排序Date,并且它没有正确排序.这是我正在使用的代码,数组alarms的名称是,成员类型的名称Date是time.
alarms.sort(by: { $0.time.compare($1.time) == .orderedAscending })
Run Code Online (Sandbox Code Playgroud)
每当我对它进行排序它只是无法正常工作,我正在通过在for循环中打印所有值来测试它.
有人可以帮我解决这个问题吗?
我尝试使用Swift 4.1的新功能在JSON解码期间将snake-case转换为camelCase.
这是一个例子:
struct StudentInfo: Decodable {
internal let studentID: String
internal let name: String
internal let testScore: String
private enum CodingKeys: String, CodingKey {
case studentID = "student_id"
case name
case testScore
}
}
let jsonString = """
{"student_id":"123","name":"Apple Bay Street","test_score":"94608"}
"""
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let decoded = try decoder.decode(StudentInfo.self, from: Data(jsonString.utf8))
print(decoded)
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
我需要提供自定义,CodingKeys因为convertFromSnakeCase策略无法推断首字母缩略词或首字母缩写词(例如studentID)的大写字母,但我希望convertFromSnakeCase策略仍然适用testScore.但是,解码器抛出错误("没有与键CodingKeys相关的值"),似乎我不能同时使用convertFromSnakeCase策略和自定义 …
如何使用DispatchQueue该类为 iOS 替换以下 Swift 代码?这是旧的 Swift 3 代码,最新的 Xcode 不会转换为 Swift 5。
dispatch_async(dispatch_get_main_queue()) { () -> Void in
// code
}
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误,说
'dispatch_get_main_queue()' 的歧义使用
为dispatch_get_main_queue()。
以下答案似乎是正确答案,我想使用它,但有人可以告诉我这是正确的吗?迅捷版
它说使用以下代码:
DispatchQueue.global(qos: .background).async {
// Background Thread
DispatchQueue.main.async {
// Run UI Updates
}
}
Run Code Online (Sandbox Code Playgroud)
除了使用之外DispatchQueue,我还有什么其他选择可以解决这个错误?
ios ×8
objective-c ×4
swift ×4
ambiguous ×1
arrays ×1
blur ×1
codable ×1
core-image ×1
iphone ×1
json ×1
jsondecoder ×1
nstimer ×1
properties ×1
swift3 ×1
timer ×1