小编mea*_*ers的帖子

SDCC和malloc() - 分配的内存比可用内存少得多

当我运行使用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系统的行为是一致的; 我是否必须执行某种魔术才能访问额外的内存,例如手动银行切换?

c malloc retro-computing sdcc

5
推荐指数
2
解决办法
743
查看次数

如何使用FFmpeg C API剪切视频

如何使用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)

c api ffmpeg

5
推荐指数
2
解决办法
4421
查看次数

更改 NSFetchedResultsController 的 fetchRequest.predicate 不会触发委托

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 设置delegateself,并且在其他情况下调用其方法。

已经有什么想法可能是错的吗?

objective-c nsfetchedresultscontroller nsfetchrequest ios

5
推荐指数
1
解决办法
1375
查看次数

为什么不动画组合比例和翻译CGAffineTransform只是工作?

有人可以解释原因:

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)

不起作用?以上立即执行翻译; 只有缩放是动画的.

另外,为什么这个肮脏的把戏有效呢?

谢谢!

cgaffinetransform catransform3d ios

5
推荐指数
1
解决办法
400
查看次数

通用 Objective-C 类的扩展无法在运行时访问该类的通用参数

我有以下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)

exception nsfetchedresultscontroller ios swift swift4

5
推荐指数
0
解决办法
1070
查看次数

如何为标签栏的项目设置动画

在我的 Swift 应用程序中,我有一个处理UITabBar.

class CustomTabBar: UITabBar {
    override func awakeFromNib() {
        super.awakeFromNib()
    }
}
Run Code Online (Sandbox Code Playgroud)

当用户点击它们时,如何为项目设置动画?我的意思是 aCGAffine(scaleX: 1.1, y: 1.1) 那么我如何为标签栏的项目设置动画?

uitabbarcontroller ios swift

5
推荐指数
3
解决办法
3665
查看次数

为什么 Swift 不在启动的同一个线程上恢复异步函数?

在《Swift 编程语言》并发章节的介绍部分中, 我读到:

\n
\n

当异步函数恢复时,Swift 不会对该函数将在哪个线程上运行做出任何保证。

\n
\n

这让我很惊讶。与等待 pthread 中的信号量相比,执行可以跳转线程,这似乎很奇怪。

\n

这让我产生以下问题:

\n
    \n
  • 为什么 Swift 不保证在同一个线程上恢复?

    \n
  • \n
  • 是否有任何规则可以\n确定恢复线程?

    \n
  • \n
  • 有没有办法影响这种行为,例如确保它在主线程上恢复?

    \n
  • \n
\n

编辑:我对 Swift 并发性和上述后续问题的研究是由于发现在主线程Task(在 SwiftUI 中)上运行的代码正在另一个线程上执行它的块而触发的。

\n

asynchronous ios swift swift-concurrency

5
推荐指数
2
解决办法
821
查看次数

临时显示其他选项卡时 UIRefreshControl 冻结(iOS 7)

我的其中一个标签上有以下内容:

- (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)

下拉表时,刷新控件开始正常旋转。

但是,当我在旋转时,很快显示另一个选项卡然后返回时,刷新控件停止旋转。

知道为什么吗?

iphone objective-c uitableview uirefreshcontrol ios7

4
推荐指数
1
解决办法
2934
查看次数

为什么循环变量在循环后变为`nil`

我有:

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

4
推荐指数
2
解决办法
160
查看次数

具有 auto CorrectionDisabled() 的 TextField 仍显示预测文本栏

我尝试使用 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)

打字时,预测建议仍然显示在键盘上方。有没有办法摆脱这些呢?

截屏

keyboard textfield ios swift swiftui

4
推荐指数
1
解决办法
722
查看次数