আইওএস অ্যাপ্লিকেশন সর্বাধিক মেমরি বাজেট


152

আমি একটি আইওএস গেমটিতে কাজ করছি যা সর্বনিম্ন 3gs হিসাবে লক্ষ্যবস্তু রয়েছে। আমরা রেটিনা ডিসপ্লে ডিভাইসগুলির জন্য এইচডি সম্পত্তি ব্যবহার করছি (আইফোন 4, আইপড টাচ 4 র্থ জেন)।

স্মৃতি অনুসারে, আইপড টাচ 4 ম জিনটি আমাদের কাছে সর্বাধিক সীমাবদ্ধ ডিভাইস বলে মনে হচ্ছে যেহেতু এটি 3 জি হিসাবে সমান পরিমাণ র‌্যাম (আইফোন 4 এর 512 এর তুলনায় 256) রয়েছে তবে আমরা এটিতে এইচডি সম্পদ ব্যবহার করছি। 100-110 মিমি র‌্যাম লোড করার চেষ্টা করার সাথে সাথে অ্যাপটি ক্রাশ করত তবে এখন আমরা 70MB এর নিচে চলে এসেছি, আমাদের কখনই লোডিং ক্র্যাশ হয়নি।

আশেপাশে প্রচুর অনুসন্ধানের পরেও মনে হচ্ছে কোনও সরকারী হার্ড সীমা নেই তাই আমাদের কীভাবে মেমরির বাজেটটি নিরাপদ রাখতে ব্যবহার করা উচিত তা জেনে রাখা উচিত? আমরা প্রতিটি মানচিত্রের জন্য মেমরির উদ্বেগ ছাড়াই শিল্পীদের একটি বাজেট দিতে সক্ষম হতে চাই।



14
নিশ্চিত নয় যে এই প্রশ্নটি কোনও কিছুর নকল হতে পারে যা পরবর্তী সময়ে জিজ্ঞাসা করা হয়েছিল।
জ্যাস্পার

উত্তর:


42

আমি মনে করি আপনি নিজের প্রশ্নের উত্তর দিয়েছেন: M০ এমবি সীমা ছাড়িয়ে যাওয়ার চেষ্টা করবেন না, তবে এটি সত্যিকারের অনেক বিষয়ের উপর নির্ভর করে: আপনি কোন আইওএস সংস্করণ ব্যবহার করছেন (এসডিকে নয়), ব্যাকগ্রাউন্ডে কতগুলি অ্যাপ্লিকেশন চলছে, সঠিক স্মৃতি আপনি ইত্যাদি ব্যবহার করছেন

কেবল তাত্ক্ষণিক স্মৃতি স্প্ল্যাশগুলি এড়িয়ে চলুন (যেমন আপনি 40 এমবি র‌্যাম ব্যবহার করছেন, এবং তারপরে কিছু সংক্ষিপ্ত গণনার জন্য 80 এমবি এর বেশি বরাদ্দ)। এই ক্ষেত্রে আইওএস তত্ক্ষণাত আপনার আবেদনটি মেরে ফেলবে kill

আপনার সম্পত্তির অলস লোডিংয়ের বিষয়টিও বিবেচনা করা উচিত (এগুলি কেবল তখনই লোড করুন যখন আপনার আগে প্রয়োজন হয় না)।


2
এটি কেবলমাত্র আমরা যতটা স্টাফ রাখতে চেয়েছিলাম (গ্রাফিক্স এবং শব্দ)। শিল্পীরা সর্বদা একটি গেমের মধ্যে তারা যতটা সম্ভব পারাতে চায় তাই সে জন্য আমি তাদের বাজেটের সাথে সীমাবদ্ধ রাখতে চাই। আমি অনুমান করি যে ব্যবহারের জন্য যুক্তিসঙ্গত সর্বাধিক মেমরির পদচিহ্নগুলি খুঁজতে আমাদের কেবলমাত্র বিভিন্ন সেটিংসে বিভিন্ন ডিভাইসে পরীক্ষা করতে হবে।
ফ্রিল্লা

2
ডিভাইসে যে কোনও সময় কেবলমাত্র 70MB (যা সম্ভবত বাজেটের আওতায় রয়েছে) বরাদ্দ করা (এমনকি অন্য স্মৃতি-ক্ষুধার্ত অ্যাপ্লিকেশনগুলিতে ভারী ব্যবহারের পরেও) সর্বদা একটি সফল বরাদ্দের গ্যারান্টি দেয়, বা এটি সম্ভবত ক্রাশ হবে?
স্টিভেন লু

1
@ স্টিভেন লু এটি আপনার ডিভাইসের উপর নির্ভর করে। যেমন আইফোন 5 বা আইপ্যাড 4 এর মতো নতুনগুলিতে 70 এমবি বরাদ্দ মোটেও সমস্যা নয়।
সর্বোচ্চ

1
হ্যাঁ তবে আমি জানতে চাই যদি আমি নিশ্চিত হতে পারি যে যতক্ষণ আমি আমার অ্যাপ্লিকেশনটির মোট ব্যবহার যাদুবিদ্যার ডিভাইসের নির্দিষ্ট মেমরির বাজেটের অধীনে রাখি যে এটি শেষ হবে না!
স্টিভেন লু

1
কোনও গ্যারান্টি নেই
সর্বোচ্চ

421

ইউটিলিটি স্প্লিট লিখে পরীক্ষার ফলাফল লিখেছেন (লিঙ্কটি তার উত্তরে রয়েছে):

ডিভাইস: (ক্র্যাশের পরিমাণ / মোট পরিমাণ / মোট শতাংশ)

  • আইপ্যাড 1: 127 এমবি / 256 এমবি / 49%
  • আইপ্যাড 2: 275 এমবি / 512 এমবি / 53%
  • আইপ্যাড 3: 645MB / 1024MB / 62%
  • আইপ্যাড 4: 585 এমবি / 1024 এমবি / 57% (আইওএস 8.1)
  • আইপ্যাড মিনি 1 ম প্রজন্ম: 297MB / 512MB / 58%
  • আইপ্যাড মিনি রেটিনা: 696MB / 1024MB / 68% (আইওএস 7.1)
  • আইপ্যাড এয়ার: 697MB / 1024MB / 68%
  • আইপ্যাড এয়ার 2: 1383MB / 2048MB / 68% (আইওএস 10.2.1)
  • আইপ্যাড প্রো 9.7 ": 1395 এমবি / 1971 এমবি / 71% (আইওএস 10.0.2 (14A456))
  • আইপ্যাড প্রো 10.5 ": 3057/4000/76% (আইওএস 11 বিটা 4)
  • আইপ্যাড প্রো 12.9 "(2015): 3058/3999/76% (আইওএস 11.2.1)
  • আইপ্যাড প্রো 12.9 "(2017): 3057/3974/77% (আইওএস 11 বিটা 4)
  • আইপ্যাড প্রো 11.0 "(2018): 2858/3769/76% (আইওএস 12.1)
  • আইপ্যাড প্রো 12.9 "(2018, 1 টিবি): 4598/5650/81% (আইওএস 12.1)
  • আইপ্যাড 10.2: 1844/2998/62% (আইওএস 13.2.3)
  • আইপড স্পর্শ চতুর্থ জেনার: 130 এমবি / 256 এমবি / 51% (আইওএস 6.1.1)
  • আইপড স্পর্শ 5 ম জেনার: 286MB / 512MB / 56% (আইওএস 7.0)
  • আইফোন 4: 325 এমবি / 512 এমবি / 63%
  • আইফোন 4 এস: 286 এমবি / 512 এমবি / 56%
  • আইফোন 5: 645MB / 1024MB / 62%
  • আইফোন 5 গুলি: 646 এমবি / 1024 এমবি / 63%
  • আইফোন 6: 645MB / 1024MB / 62% (আইওএস 8.x)
  • iPhone6 ​​+: 645MB / 1024MB / 62% (আইওএস 8.x)
  • আইফোন 6 এস: 1396 এমবি / 2048 এমবি / 68% (আইওএস 9.2)
  • iPhone6s +: 1392MB / 2048MB / 68% (আইওএস 10.2.1)
  • আইফোনএসই: 1395 এমবি / 2048 এমবি / 69% (আইওএস 9.3)
  • আইফোন 7: 1395/2048 এমবি / 68% (আইওএস 10.2)
  • আইফোন 7 +: 2040 এমবি / 3072 এমবি / 66% (আইওএস 10.2.1)
  • আইফোন 8: 1364/1990 এমবি / 70% (আইওএস 12.1)
  • আইফোন এক্স: 1392/2785/50% (আইওএস 11.2.1)
  • আইফোন এক্সএস: 2040/3754/54% (আইওএস 12.1)
  • আইফোন এক্সএস সর্বোচ্চ: 2039/3735/55% (আইওএস 12.1)
  • আইফোন এক্সআর: 1792/2813/63% (আইওএস 12.1)
  • আইফোন 11: 2068/3844/54% (আইওএস 13.1.3)
  • আইফোন 11 প্রো সর্বোচ্চ: 2067/3740/55% (আইওএস 13.2.3)

2
আইফোন 4: অনুরূপ মান নিশ্চিত হয়েছে, বৈধ বলে মনে হচ্ছে: পি
সিআরসি ক্র্যাক

3
আইফোন 5 ক্র্যাশ করে ± 645 এমবি।
এ্যাস_নেট

4
@ য্যাস্পারপল আমার পোস্টে বিভিন্ন ডিভাইস অন্তর্ভুক্ত করার জন্য আমি সম্পাদনা করেছি, আশা করি ঠিক আছে। আমি যে আইওএস ভার্সনটি পরীক্ষা করেছি তাতে এটি যুক্ত হওয়ার পরে আমি যুক্ত করেছি, তবে আপনি যদি গুরুত্বপূর্ণ মনে করেন তবে এটিকে সরাতে দ্বিধা বোধ করবেন না।
জোসেফ এইচ

2
দুর্দান্ত যে এই তালিকাটি তৈরি এবং রক্ষণাবেক্ষণ করা হয়েছে। আমার অভিজ্ঞতায়, সুরক্ষিত থাকার জন্য আমাকে স্মৃতিশক্তি অনেক কম রাখতে হয়েছিল, যা এখানে দেখানো হয়েছে তার 20% হতে পারে। ডিভাইস থেকে ডিভাইস পার্থক্যও অত্যন্ত পরিবর্তনশীল।
ব্যবহারকারী 1021430

1
সবেমাত্র এটি 12.9 আইপ্যাড প্রো এ চালানো হয়েছে। 2451MB এ মেমরি সতর্কতা, 3064MB এ ক্র্যাশ, মোট 3981MB।
লক করুন

134

আমি একটি ছোট্ট ইউটিলিটি তৈরি করেছি যা ক্রাশ করার জন্য যথাসম্ভব মেমোরি বরাদ্দ করার চেষ্টা করে এবং যখন মেমরির সতর্কতা এবং ক্রাশ ঘটে তখন তা রেকর্ড করে। এটি কোনও আইওএস ডিভাইসের জন্য মেমরির বাজেট কী তা খুঁজে পেতে সহায়তা করে।

https://github.com/Split82/iOSMemoryBudgetTest


আমি একটি আকর্ষণীয় পরীক্ষা করেছি: এক্সকোড মনিটরিং মেমরির ব্যবহারের সাথে আমার অ্যাপটি চালিয়েছি, ব্যাকগ্রাউন্ডে প্রবেশ করেছে, বাজেটস্টেস্ট চালিয়েছে। আমার ইন-ব্যাকগ্রাউন্ড অ্যাপটি না করার সময় পরীক্ষাটি নিহত হয়েছিল। আমি কেন জানতে আগ্রহী। এছাড়াও, এটি @cprcrack অন্য উত্তরে যা বলেছিল তার বিপরীতে।
রবার্তো

19

আমার অ্যাপ্লিকেশনটিতে, আরও মেমরি ব্যবহার করা থাকলে ব্যবহারকারীর অভিজ্ঞতা আরও ভাল, সুতরাং আমার সিদ্ধান্ত নিতে হবে যে আমার সমস্ত স্মৃতি মেমরিটি সত্যিই মুক্ত করা উচিত didReceiveMemoryWarning। স্প্লিট এবং জ্যাস্পার পোলের উত্তরের ভিত্তিতে, মোট ডিভাইস মেমরির সর্বাধিক 45% ব্যবহার করা নিরাপদ প্রান্তিক বলে মনে হয় (ধন্যবাদ ছেলেরা)।

যদি কেউ আমার প্রকৃত বাস্তবায়নটি দেখতে চায়:

#import "mach/mach.h"

- (void)didReceiveMemoryWarning
{
    // Remember to call super
    [super didReceiveMemoryWarning];

    // If we are using more than 45% of the memory, free even important resources,
    // because the app might be killed by the OS if we don't
    if ([self __getMemoryUsedPer1] > 0.45)
    {
        // Free important resources here
    }

    // Free regular unimportant resources always here
}

- (float)__getMemoryUsedPer1
{
    struct mach_task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&info, &size);
    if (kerr == KERN_SUCCESS)
    {
        float used_bytes = info.resident_size;
        float total_bytes = [NSProcessInfo processInfo].physicalMemory;
        //NSLog(@"Used: %f MB out of %f MB (%f%%)", used_bytes / 1024.0f / 1024.0f, total_bytes / 1024.0f / 1024.0f, used_bytes * 100.0f / total_bytes);
        return used_bytes / total_bytes;
    }
    return 1;
}

সুইফ্ট ( এই উত্তরের ভিত্তিতে ):

func __getMemoryUsedPer1() -> Float
{
    let MACH_TASK_BASIC_INFO_COUNT = (sizeof(mach_task_basic_info_data_t) / sizeof(natural_t))
    let name = mach_task_self_
    let flavor = task_flavor_t(MACH_TASK_BASIC_INFO)
    var size = mach_msg_type_number_t(MACH_TASK_BASIC_INFO_COUNT)
    var infoPointer = UnsafeMutablePointer<mach_task_basic_info>.alloc(1)
    let kerr = task_info(name, flavor, UnsafeMutablePointer(infoPointer), &size)
    let info = infoPointer.move()
    infoPointer.dealloc(1)
    if kerr == KERN_SUCCESS
    {
        var used_bytes: Float = Float(info.resident_size)
        var total_bytes: Float = Float(NSProcessInfo.processInfo().physicalMemory)
        println("Used: \(used_bytes / 1024.0 / 1024.0) MB out of \(total_bytes / 1024.0 / 1024.0) MB (\(used_bytes * 100.0 / total_bytes)%%)")
        return used_bytes / total_bytes
    }
    return 1
}

1
মাপ (তথ্য) এর পরিবর্তে আকারটি TASK_BASIC_INFO_COUNT হওয়া উচিত - এই ভুলটি একই কোড সহ অনেক জায়গায় অনুলিপি করা হয়েছে
ম্যাক্সিম খোলিয়াভকিন

ধন্যবাদ স্পিকার আপনি এই লিঙ্কের উপর ভিত্তি করে সঠিক বলে মনে হচ্ছে । আপনার কাছে অন্য কোনও রেফারেন্স রয়েছে যেখানে এই তথ্যটি পাওয়া যাবে?
সিপ্রিসক্র্যাক

আপেল TASK_BASIC_INFO_COUNT টিও ব্যবহার করে
ম্যাক্সিম খোলিয়াভকিন

৪৫% আর নিরাপদ সীমা নয়, এটি আইফোন এক্সের জন্য 50% ক্র্যাশ মানের খুব কাছাকাছি I আমি 40%, বা প্রতিটি ডিভাইসের জন্য পৃথক মান ব্যবহার করার পরামর্শ দিই।
স্লাইভ

8

স্প্লিটস রেপো কাঁটাচামচ করে, আমি একটি iOS মেমরি পরীক্ষা করার জন্য তৈরি করেছি যা আজকের এক্সটেনশনে বরাদ্দ করা যেতে পারে

iOSMemoryBudgetTestForExtension

নিম্নলিখিতটি আমি আইফোন 5 এস এ পেয়েছি

মেমরি সতর্কতা 10 এমবি এ

অ্যাপটি 12 এমবিতে ক্র্যাশ হয়েছে

এর মাধ্যমে অ্যাপল কেবলমাত্র কোনও এক্সটেনশানকে তাদের সম্পূর্ণ সম্ভাবনার সাথে কাজ করার অনুমতি দিচ্ছে


7

আপনার ডাব্লুডাব্লুডিসি 2010 সেশন ভিডিওগুলি থেকে 147 সেশনটি দেখতে হবে । এটি "আইফোন ওএসে অ্যাডভান্সড পারফরম্যান্স অপটিমাইজেশন, পার্ট 2"।
মেমরি অপটিমাইজেশন সম্পর্কে অনেক ভাল পরামর্শ রয়েছে।

কিছু টিপস হ'ল:

  • NSAutoReleasePoolআপনার মেমোরির ব্যবহার স্পাইক না হয় তা নিশ্চিত করতে নেস্টেড এস ব্যবহার করুন।
  • CGImageSourceবড় ছবি থেকে থাম্বনেইল তৈরি করার সময় ব্যবহার করুন ।
  • কম মেমরি সতর্কতা সাড়া।

আমার প্রশ্নটি কীভাবে অপ্টিমাইজ করা যায় তা নয় (যদিও লিঙ্কটির জন্য ধন্যবাদ), আমরা নিজের ব্যবহারের কতটুকু অনুমতি দিতে পারি তা সম্পর্কে। কারণটি হ'ল উদাহরণস্বরূপ, আমরা যদি 20 এমবি অর্জন করতে অনুকূলিত করি তবে শিল্পীরা সেই 20 এমবিটি ব্যবহার করতে চাইবেন যদি এটি যুক্তিসঙ্গত "বাজেটের" মধ্যে থাকে তবে এটি নিশ্চিত যে এটি কোনও পারফরম্যান্স সমস্যা বা মেমরির ক্রাশ সৃষ্টি করবে না।
ফ্রিল্লা

ঠিক আছে. ক্র্যাশটি ঘটবে কারণ সীমাবদ্ধ মেমরির কারণে ওএস অ্যাপটি শেষ করে দিচ্ছে। আপনি শুধু একটি যোগ করতে পারিনি NSLogভিতরে didReceiveMemoryWarningএবং তারপর যেখানে আপনি মেমরি বিভিন্ন পরিমাণে বরাদ্দ কিছু পরীক্ষামূলক এবং কি তবুও ভেবে দেখবে যখন মেমরির সতর্কবার্তা মধ্যে পদাঘাত শুরু।
Kobski

4

আইওএস 13 দিয়ে শুরু করে এটি ব্যবহার করে এটি অনুসন্ধানের একটি অ্যাপল-সমর্থিত উপায় রয়েছে

#include <os/proc.h>

size_t os_proc_available_memory(void)

এখানে পরিচয় করিয়ে দেওয়া হয়েছে: https://developer.apple.com/videos/play/wwdc2019/606/

প্রায় 29 মিনিটের মতো h

সম্পাদনা করুন: ডকুমেন্টেশনে লিঙ্ক যুক্ত করা হচ্ছে https://developer.apple.com/docamentation/os/3191911-os_proc_available_memory?language=objc


অবশেষে! আমি কয়েকটি ডিভাইসে os_proc_av উপলভ্য_মেমোরি () পরীক্ষা করেছি এবং ফলাফলগুলি বড় টেবিলের মানগুলির সাথে খুব মিল!
স্লিভ

3
- (float)__getMemoryUsedPer1
{
    struct mach_task_basic_info info;
    mach_msg_type_number_t size = MACH_TASK_BASIC_INFO;
    kern_return_t kerr = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&info, &size);
    if (kerr == KERN_SUCCESS)
    {
        float used_bytes = info.resident_size;
        float total_bytes = [NSProcessInfo processInfo].physicalMemory;
        //NSLog(@"Used: %f MB out of %f MB (%f%%)", used_bytes / 1024.0f / 1024.0f, total_bytes / 1024.0f / 1024.0f, used_bytes * 100.0f / total_bytes);
        return used_bytes / total_bytes;
    }
    return 1;
}

যদি কেউ MACH_TASK_BASIC_INFO এর পরিবর্তে TASK_BASIC_INFO_COUNT ব্যবহার করে তবে আপনি পাবেন

কেরার == কেইআরএনপিওএলআইডি_আরগমেন্ট (৪)


আপনার কমপক্ষে উল্লেখ করা উচিত যে আপনার উত্তরটি প্রায় উপরে সিপিআরক্র্যাকের ঠিক অনুলিপি এবং পেস্ট । শুধুমাত্র পার্থক্যটি হল TASK_BASIC_INFO_COUNT।
mrvincenzo

2

আমি ডিভাইস র‌্যাম অনুসারে জ্যাসপার্স তালিকাটি বাছাই করে আরও একটি তালিকা তৈরি করেছি (আমি স্প্লিটের সরঞ্জাম দিয়ে নিজস্ব পরীক্ষা করেছি এবং কিছু ফলাফল স্থির করেছি - আমার মন্তব্যগুলি জ্যাসপার্সের থ্রেডে দেখুন)।

ডিভাইস র‌্যাম: ক্রাশের শতাংশের ব্যাপ্তি

  • 256MB: 49% - 51%
  • 512 এমবি: 53% - 63%
  • 1024MB: 57% - 68%
  • 2048 এমবি: 68% - 69%
  • 3072 এমবি: 63% - 66%
  • 4096MB: 77%
  • 6144MB: 81%

বিশেষ ক্ষেত্রে:

  • আইফোন এক্স (3072 এমবি): 50%
  • আইফোন এক্সএস / এক্সএস সর্বোচ্চ (4096 এমবি): 55%
  • আইফোন এক্সআর (3072 এমবি): 63%
  • আইফোন 11/11 প্রো সর্বোচ্চ (4096MB): 54% - 55%

ডিভাইস র‌্যাম সহজেই পড়া যায়:

[NSProcessInfo processInfo].physicalMemory

আমার অভিজ্ঞতা থেকে 1GB ডিভাইসের জন্য 45%, 2 / 3GB ডিভাইসের জন্য 50% এবং 4GB ডিভাইসের জন্য 55% ব্যবহার করা নিরাপদ। ম্যাকোসের জন্য শতাংশ কিছুটা বড় হতে পারে।


আপডেট: মনে হচ্ছে আইফোন এক্স একটি ব্যতিক্রম - এটি 50% র‌্যাম ব্যবহার করার সময় ক্র্যাশ হয় (iOSMemoryBudgetTest অ্যাপ্লিকেশন দিয়ে পরীক্ষা করা হয়)। আমি তালিকা আপডেট।
স্লিভ

0

উপরের অনেক উত্তরের সাথে কাজ করে, আমি অ্যাপল os_proc_available_memory()আইওএস 13+ এর জন্য নতুন পদ্ধতি প্রয়োগ করেছি যার সাথে NSByteCountFormatterমেমরির উত্তম আউটপুট জন্য বেশ কয়েকটি দরকারী বিন্যাসের বিকল্প সরবরাহ করা হয়েছে:

#include <os/proc.h>

....

- (NSString *)memoryStringForBytes:(unsigned long long)memoryBytes {
    NSByteCountFormatter *byteFormatter = [[NSByteCountFormatter alloc] init];
    byteFormatter.allowedUnits = NSByteCountFormatterUseGB;
    byteFormatter.countStyle = NSByteCountFormatterCountStyleMemory;
    NSString *memoryString = [byteFormatter stringFromByteCount:memoryBytes];
    return memoryString;
}

- (void)memoryLoggingOutput {
    if (@available(iOS 13.0, *)) {
        NSLog(@"Physical memory available: %@", [self memoryStringForBytes:[NSProcessInfo processInfo].physicalMemory]);
        NSLog(@"Memory A (brackets): %@", [self memoryStringForBytes:(long)os_proc_available_memory()]);
        NSLog(@"Memory B (no brackets): %@", [self memoryStringForBytes:(long)os_proc_available_memory]);
    }
}

গুরুত্বপূর্ণ দ্রষ্টব্য: শেষে ভুলে যাবেন না ()আমি পদ্ধতিতে উভয় NSLogবিকল্প অন্তর্ভুক্ত করেছি memoryLoggingOutputকারণ এটি আপনাকে সতর্ক করে না যে তারা অনুপস্থিত এবং বন্ধনী অন্তর্ভুক্ত করতে ব্যর্থতা একটি অপ্রত্যাশিত এখনও ধ্রুবক ফলাফল প্রদান করে।

পদ্ধতি থেকে স্ট্রিংটি memoryStringForBytesএরূপ মানের আউটপুট দেয়:

NSLog(@"%@", [self memoryStringForBytes:(long)os_proc_available_memory()]); // 1.93 GB
// 2 seconds later
NSLog(@"%@", [self memoryStringForBytes:(long)os_proc_available_memory()]); // 1.84 GB
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.