当我运行使用SDCC 3.1.0编译此代码,并在Amstrad CPC 464上运行它(在仿真下,在Wine上运行WinCPC 0.9.26):
void _test_malloc()
{
long idx = 0;
while (1)
{
if (malloc(5))
{
printf("%ld\r\n", ++idx);
}
else
{
printf("done");
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
......它一直在92 malloc()s上点击.我做了460字节,这引出了几个问题:
malloc()在这个系统上做什么?我有点希望即使在64kB系统上也能提供更多的存储空间
64kB系统和128kB系统的行为是一致的; 我是否必须执行某种魔术才能访问额外的内存,例如手动银行切换?
如何使用FFmpeg C API剪切视频?例如从00:10:00到00:20:00.我需要使用哪些功能?
我使用此功能转换视频:
int convert(char *file) {
AVFrame *frame;
AVPacket inPacket, outPacket;
if(avio_open(&outFormatContext->pb, file, AVIO_FLAG_WRITE) < 0) {
fprintf(stderr, "convert(): cannot open out file\n");
return 0;
}
avformat_write_header(outFormatContext, NULL);
frame = avcodec_alloc_frame();
av_init_packet(&inPacket);
while(av_read_frame(inFormatContext, &inPacket) >= 0) {
if(inPacket.stream_index == inVideoStreamIndex) {
avcodec_decode_video2(inCodecContext, frame, &frameFinished, &inPacket);
if(frameFinished) {
av_init_packet(&outPacket);
avcodec_encode_video2(outCodecContext, &outPacket, frame, &outputed);
if(outputed) {
if (av_write_frame(outFormatContext, &outPacket) != 0) {
fprintf(stderr, "convert(): error while writing video frame\n");
return 0;
}
}
av_free_packet(&outPacket);
}
}
}
av_write_trailer(outFormatContext);
av_free_packet(&inPacket);
return …Run Code Online (Sandbox Code Playgroud) NSPredicate我的 FRC 上有一个fetchRequest。在某个时刻,一个对象被添加到 CoreData,我创建一个新谓词,更新fetchRequest并执行获取:
self.fetchedAddressesController.fetchRequest.predicate = self.predicate;
BOOL success = [self.fetchedAddressesController performFetch:nil];
Run Code Online (Sandbox Code Playgroud)
然而,这不会调用 FRC 的委托方法,例如controllerWillChangeContent:. 而且我的表视图没有更新。
但是,当我添加以下行时:
[self.tableView reloadData];
Run Code Online (Sandbox Code Playgroud)
在上面显示的两个下方,我确实看到了预期的更新。这说明要显示的数据确实发生了变化。
我检查了新的谓词,没有问题。我还将 FRC 设置delegate为self,并且在其他情况下调用其方法。
已经有什么想法可能是错的吗?
有人可以解释原因:
UIView.animate(withDuration: 0.333)
{
self.someView.transform = CGAffineTransform(scaleX: 0.3, y: 0.3).translatedBy(x: 100, y: 100)
}
Run Code Online (Sandbox Code Playgroud)
不起作用?以上立即执行翻译; 只有缩放是动画的.
另外,为什么这个肮脏的把戏有效呢?
谢谢!
我有以下NSFetchedResultsController扩展:
extension NSFetchedResultsController
{
func tryObjectAtIndex(_ indexPath: IndexPath) throws -> AnyObject // ERROR HERE
{
do
{
try ObjC.catchException
{
return self.object(at: indexPath) // CAUSE
}
}
catch
{
print("An error ocurred: \(error)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
其中ObjC是一个 Objective-C 类(来自此处)。这是.h:
#import <Foundation/Foundation.h>
@interface ObjC : NSObject
+ (BOOL)catchException:(void(^)())tryBlock error:(__autoreleasing NSError **)error;
@end
Run Code Online (Sandbox Code Playgroud)
还有.m:
@implementation ObjC
+ (BOOL)catchException:(void(^)())tryBlock error:(__autoreleasing NSError **)error
{
@try
{
tryBlock();
return YES;
}
@catch (NSException *exception)
{ …Run Code Online (Sandbox Code Playgroud) 在我的 Swift 应用程序中,我有一个处理UITabBar.
class CustomTabBar: UITabBar {
override func awakeFromNib() {
super.awakeFromNib()
}
}
Run Code Online (Sandbox Code Playgroud)
当用户点击它们时,如何为项目设置动画?我的意思是 aCGAffine(scaleX: 1.1, y: 1.1)
那么我如何为标签栏的项目设置动画?
在《Swift 编程语言》并发章节的介绍部分中, 我读到:
\n\n\n当异步函数恢复时,Swift 不会对该函数将在哪个线程上运行做出任何保证。
\n
这让我很惊讶。与等待 pthread 中的信号量相比,执行可以跳转线程,这似乎很奇怪。
\n这让我产生以下问题:
\n为什么 Swift 不保证在同一个线程上恢复?
\n是否有任何规则可以\n确定恢复线程?
\n有没有办法影响这种行为,例如确保它在主线程上恢复?
\n编辑:我对 Swift 并发性和上述后续问题的研究是由于发现在主线程Task(在 SwiftUI 中)上运行的代码正在另一个线程上执行它的块而触发的。
我的其中一个标签上有以下内容:
- (void)viewDidLoad
{
[super viewDidLoad];
self.clearsSelectionOnViewWillAppear = YES;
UIRefreshControl* refreshControl = [[UIRefreshControl alloc] init];
refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Sync"];
[refreshControl addTarget:self
action:@selector(refresh:)
forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;
//### Workaround: http://stackoverflow.com/a/19126113/1971013
dispatch_async(dispatch_get_main_queue(), ^
{
[self.refreshControl beginRefreshing];
[self.refreshControl endRefreshing];
});
}
- (void)refresh:(id)sender
{
if ([Settings sharedSettings].haveAccount == YES)
{
[[DataManager sharedManager] synchronizeWithServer:^(NSError* error)
{
[sender endRefreshing];
}];
}
else
{
[sender endRefreshing];
}
}
Run Code Online (Sandbox Code Playgroud)
下拉表时,刷新控件开始正常旋转。
但是,当我在旋转时,很快显示另一个选项卡然后返回时,刷新控件停止旋转。
知道为什么吗?
我有:
NSDictionary* server;
for (server in self.servers)
{
if (<some criterium>)
{
break;
}
}
// If the criterium was never true, I want to use the last item in the
// the array. But turns out that `server` is `nil`.
Run Code Online (Sandbox Code Playgroud)
循环块永远不会改变server.
servers是一个NSMutableArray词典,一个在循环中没有改变的属性.
为什么循环结束后server有值nil?
这是我第一次在循环后使用这样的变量.没有想太多,我认为它会像(在旧的C天)一样工作:
int i;
for (i = 0; i < n; i++)
{
...
}
Run Code Online (Sandbox Code Playgroud) cocoa objective-c nsdictionary fast-enumeration nsfastenumeration
我尝试使用 SwiftUI TextField 并希望摆脱键盘上方的预测建议栏:
struct ContentView: View {
@State private var text: String = ""
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
TextField("Hello", text: $text)
.autocorrectionDisabled()
.textContentType(.init(rawValue: ""))
}
.padding()
}
}
Run Code Online (Sandbox Code Playgroud)
打字时,预测建议仍然显示在键盘上方。有没有办法摆脱这些呢?
ios ×6
swift ×4
objective-c ×3
c ×2
api ×1
asynchronous ×1
cocoa ×1
exception ×1
ffmpeg ×1
ios7 ×1
iphone ×1
keyboard ×1
malloc ×1
nsdictionary ×1
sdcc ×1
swift4 ×1
swiftui ×1
textfield ×1
uitableview ×1